theme: condensed-night-purple
highlight: a11y-dark
这是我参与「第四届青训营 」笔记创作活动的的第11天
搭建本地服务器
webpack提供了一个可选的本地开发服务器,这个本地服务器基于node.js搭建,内部使用express框架,可以实现我们想要的让浏览器自动刷新显示我们修改后的结果。
不过它是一个单独的模块,在webpack中使用之前需要先安装它--对webpack提供开发时服务 1. 安装:npm install --save-dev webpack-dev-server@2.9.1
devserver也是作为webpack中的一个选项,选项本身可以设置如下属性: contentBase:为哪一个文件夹提供本地服务,默认是根文件夹,我们这里要填写./dist port:端口号 默认8080 inline:页面实时刷新 Boolean historyApiFallback:在SPA页面中,依赖HTML5的history模式
- 配置:webpack.config.js文件配置修改如下:
js module.exports = { devServer : { contentBase : './dist', inline : true } }
使用:webpack-dev-server
报错:在终端直接输入该命令,会报错,因为终端去全局找,而我们是在局部安装的 解决:node_modules/.bin/webpack-dev-server
(可以 ./node_modules/.bin/webpack-dev-server
报错,要换成反斜杠\(没试
- 命令映射:我们可以再配置另外一个scripts:
js // package.json { "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "build": "webpack", "dev" : "webpack-dev-server --open" // --open参数表示直接打开浏览器 }, }
分离配置文件
- 有些配置只在开发时使用,有些只在发布时使用,所以要分离配置文件
开发时和发布/编译时的配置进行分离
base.config.js: 公共配置
dev.config.js: 开发配置
prod.config.js: 发布配置
为了将配置文件合并一起,安装:npm install webpack-merge@4.1.5 --save-dev
merge:合并
const {merge} = require("webpack-merge") 现在要这样2021-1-16 引入合并方法,查看源码后看到导出中含有merge,所以引入方式是 {merge} = require() 新版本要调用merge 方法 webpackMerge.merge()
```js // prod.config.js const UglifyjsWebpackPlugin = require('uglifyjs-webpack-plugin') const WebpackMerge = require('webpack-merge') // 导入base.config const baseConfig = require('./base.config')
module.exports = WebpackMerge(baseConfig,{ plugins : [ new UglifyjsWebpackPlugin(), ], }) // 因为高版本webpack-merge导出的是mrege函数,且不是默认导出所以必须使用{merge}接收!
// dev.config.js const WebpackMerge = require('webpack-merge') // 导入base.config const baseConfig = require('./base.config')
module.exports = WebpackMerge(baseConfig,{ devServer : { contentBase : './dist', inline : true } }) ```
此时运行npm run build
报错:No configuration file found and no output filename configured via CLI option. A configuration file could be named 'webpack.config.js' in the current directory. 找不到配置文件webpack.config.js
解决: 在package,json的scripts添加--config ./build/prod.config.js
手动指定配置文件,而不是默认的 js { "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "build": "webpack --config ./build/prod.config.js", "dev": "webpack-dev-server --open --config ./build/prod.config.js" }, }
打包后发现东西被打包在build文件夹下 因为之前我们在base.config.js文件中写了 js output : { path : path.resolve(__dirname,'dist'), // path 通常是绝对路径 // __dirname:指的是当前文件所在 文件夹 的绝对路径 filename : 'bundle.js', // publicPath : 'dist/' // 以后涉及到url,都会自动在前面拼接dist/ },
所以在build文件夹下创建了dist文件夹,修改:path : path.resolve(__dirname,'../dist'),