Skip to content

TypeError: Cannot read property 'source' of undefined #4

@lin-hun

Description

@lin-hun

image

my config

I set filename as path.resolve(settings.output,v,v+'.html'), get error.
but set path.resolve(settings.output,v+'.html') correctly
'use strict'
let webpack = require('webpack')
let path = require('path')
let fs = require('fs')
let logger = require('log4js')
let log = logger.getLogger()
let CopyWebpackPlugin = require('copy-webpack-plugin');
let HtmlWebpackPlugin = require('html-webpack-plugin')
let HtmlWebpackInlineSourcePlugin = require('html-webpack-inline-source-plugin');
let config = {}
module.exports = {
  config: function (settings) {
    var me = this
    me.plugin(settings);
    me.output(settings)
    me.loaders()
    me.entry(settings)
    // log.info(JSON.stringify(config))
    // return
    return config
  },
  output: function (settings) {
    config.output = {
      path: settings.output,
      filename: "[name]"
    }
    if (settings.env == 'dev') {
      config.output.publicPath = "/www/build/"
    }
  },
  entry: function (settings) {
    config.entry = {}
    // entry
    let arr = settings.dir ? settings.dir.split(',') : fs.readdirSync(path.resolve(settings.projectPath, 'src'))
    arr.forEach(function (v, i) {
      let temp = path.resolve(settings.projectPath, 'src', v + '/')
      if (v !== 'script' && fs.lstatSync(temp).isDirectory()) {

        fs.readdirSync(temp).forEach(function (value, index) {
            if (path.extname(value) == '.js') {
              let key = v + '/' + value
              let val = ['./src/' + key]
              if (settings.env == 'dev') {
                val.push("webpack-dev-server/client?http://localhost:8080/", "webpack/hot/dev-server")
              }
              config.entry[key] = val
              // production
              // log.info(path.resolve(settings.output,v,v+'.html'))
              // return
              if (settings.env == 'prod') {
                config.plugins.push(new HtmlWebpackPlugin({
                  // inject:true,
                  template: './html/' + v + '.html',
                  // hash:false,
                  chunks:[key],
                  inlineSource: '.(js|css)$',
                  // filename:path.resolve(settings.output,'html',v+'.html')
                  filename:path.resolve(settings.output,v,v+'.html')
                }))
              }
              // add html plugin to js
              if (settings.env == 'dev') {
                config.plugins.push(new HtmlWebpackPlugin({
                  template: './html/' + v + '.html',
                }))
              }
            }

        })
      }
    })
  },
  loaders: function () {
    config.module = {}
    config.module.loaders = [
      {
        test: /\.scss$/,
        loaders: ["style", "css", "sass"]
      },
      {
        test: /\.html$/,
        loader: "raw-loader"
      }
    ]
  },
  plugin: function (settings) {
    // plugins
    config.plugins = [
      new CopyWebpackPlugin([{from: './src/script', to: settings.output + '/script/'}]),
      new webpack.DefinePlugin({
        'process.env.NODE_ENV': JSON.stringify(settings.env)
      })
    ]
    if (settings.env == 'dev') {
      config.plugins.push(new webpack.HotModuleReplacementPlugin())
    }
    if (settings.env == 'prod') {
      config.plugins.push(
        new webpack.optimize.UglifyJsPlugin({
          compressor: {
            warnings: false,
          }
        }), new HtmlWebpackInlineSourcePlugin()
      )
    }
  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions