UNPKG

custom-app

Version:

ITIMS��Ʒ�鿪��ר��React���,�Dz��ý��ּ�dhcc-app���������

85 lines (83 loc) 3.27 kB
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);