custom-app
Version:
ITIMS��Ʒ�鿪��ר��React���,�Dz��ý��ּ�dhcc-app���������
85 lines (83 loc) • 3.27 kB
JavaScript
let path = require('path');
let merge = require("webpack-merge");
let webpack = require("webpack");
let config = require("./webpack.base.conf.js");
let WebpackDevServer = require('webpack-dev-server');
let HtmlWebpackPlugin = require("html-webpack-plugin");
let reactAppPath = require('./rootpath').path
reactAppPath = reactAppPath.split(",").join(path.sep)
let projectName = process.argv.slice(2)[0]
let port = process.argv.slice(2)[1]
let outputPath = path.join(path.resolve(".."), 'build', projectName);
console.log(projectName)
let isPlugin = false
try {
const tpackageJSON = require(path.join(reactAppPath, "src", projectName, "package.json"))
if (tpackageJSON && tpackageJSON.moduleType == 'plugin') {
isPlugin = true
}
} catch (error) {
}
config.entry = isPlugin ? path.join(reactAppPath, 'src', projectName, 'src', 'index.js') : path.join(reactAppPath, 'src', projectName, 'index.js')
var webpackConfig = merge(config, {
output: {
filename: "index.js",
path: outputPath,
/*
* chunkFilename用来打包require.ensure方法中引入的模块,如果该方法中没有引入任何模块则不会生成任何chunk块文件
* 比如在main.js文件中,require.ensure([],function(require){alert(11);}),这样不会打包块文件
* 只有这样才会打包生成块文件require.ensure([],function(require){alert(11);require('./greeter')})
* 或者这样require.ensure(['./greeter'],function(require){alert(11);})
* chunk的hash值只有在require.ensure中引入的模块发生变化,hash值才会改变
* 注意:对于不是在ensure方法中引入的模块,此属性不会生效,只能用CommonsChunkPlugin插件来提取
* */
chunkFilename: 'chunk/[chunkhash:8].' + projectName + '.js'
},
mode: 'development',
devtool: "inline-source-map",
optimization: {
// 找到chunk中共享的模块,取出来生成单独的chunk
splitChunks: {
chunks: "all",
minSize: 30000,
minChunks: 1,
maxAsyncRequests: 5,
maxInitialRequests: 3,
automaticNameDelimiter: '~',
name: true,
cacheGroups: {
vendors: {
test: /[\\/]node_modules[\\/]/,
priority: -10
},
default: {//cacheGroups重写继承配置,设为false不继承
minChunks: 2,
priority: -20,
reuseExistingChunk: true
}
}
}
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
new HtmlWebpackPlugin({
minify: {
removeAttributeQuotes: true
},
template: isPlugin ? path.join(reactAppPath, 'src', projectName, 'src', 'index.html') : path.join(reactAppPath, 'src', projectName, 'index.html'),
filename: 'index.html'
})
]
})
//console.log("contentBase:" + path.join(reactAppPath, 'src', projectName, "public"))
var compiler = webpack(webpackConfig);
var server = new WebpackDevServer(compiler, {
/*我们写入配置的地方*/
contentBase: path.join(reactAppPath, 'src', projectName, "public"),
overlay: true,//用来在编译出错的时候,在浏览器页面上显示错误
stats: "errors-only",//表示只打印错误
inline: true,
hot: true,
open: true
});
server.listen(port);