详解从零搭建 vue2 vue-router2 webpack3 工程(8)
接下来就是如何启动webpack-dev-server,vue-cli的webpack模板工程用的express及webpack中间件做开发服务器,其实用webpack-dev-server就能满足需求,当然用express能够做更多的事情,毕竟webpack-dev-server是一个轻量级的express。dev.js内容如下:
var webpack = require('webpack'); var webpackDevServer = require('webpack-dev-server'); var devConfig = require("./webpack.dev.config"); var config = require("./config"); var compiler = webpack(devConfig); var server = new webpackDevServer(compiler, { hot: true, noInfo: true, publicPath: config.dev.outputPublicPath, stats: { colors: true } }); server.listen(config.dev.port, "0.0.0.0"); var url = `http://localhost:${config.dev.port}/`; // 需先安装 opn 模块 npm i opn -D var opn = require('opn'); // 打包完毕后启动浏览器 server.middleware.waitUntilValid(function() { console.log(`> Listening at ${url}`); opn(`${url}`); })
生产配置文件(webpack.prod.config.js)内容如下:
// 设定为生产环境 process.env.NODE_ENV = 'production'; var webpack = require('webpack'); var merge = require('webpack-merge'); var HtmlWebpackPlugin = require('html-webpack-plugin'); var ExtractTextPlugin = require('extract-text-webpack-plugin'); var baseWebpackConfig = require('./webpack.base.config'); var utils = require('./utils'); var config = require('./config'); module.exports = merge(baseWebpackConfig, { output: { path: config.prod.outputPath, publicPath: config.prod.outputPublicPath }, module: { rules: utils.styleLoaders() }, plugins: [ new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"production"' }), new webpack.optimize.UglifyJsPlugin(), new ExtractTextPlugin({ filename: "css/style.css?[contenthash:8]" }), new HtmlWebpackPlugin({ filename: 'index.html', template: 'index.html', inject: true }) ] })
生产构建(prod.js)内容如下:
var webpack = require("webpack"); var webpackProdConfig = require('./webpack.prod.config'); webpack(webpackProdConfig, function(err, stats) { process.stdout.write(stats.toString()); });
对应在package.json中添加开发和生产构建的命令如下:
"scripts": { "dev": "node build/dev.js", "build": "node build/prod.js" }
代码分割
参照vue-cli及webpack文档的提取公共代码的方式,利用插件webpack.optimize.CommonsChunkPlugin将来自node_modules下的模块提取到vendor.js(一般来讲都是外部库,短时间不会发生变化)。于是有如下代码:
new webpack.optimize.CommonsChunkPlugin({ name: 'vendor', minChunks: function(module, count) { return module.resource && /\.js$/.test(module.resource) && module.resource.indexOf(path.join(__dirname, '../node_modules')) === 0 } })
内容版权声明:除非注明,否则皆为本站原创文章。