Webpack进入了 4.x 版本,紧跟着对开发者的配置能力有了一些新的要求。今天我们看一下 Webpack 4.x 下的配置工作该如何进行。
安装 webpack 和 webpack-cli
安装 npm 包,分为全局安装和本地安装。区别是全局安装后,可以通过 webpack 命令直接执行 webpack 程序,如下:
webpack -v
复制代码
本地安装完,接下来需要通过 npm 包路径的形式执行 webpack 命令,如下:
node node_modules/webpack/bin/webpack -v
//或者
node_modules/.bin/webpack -v
复制代码
通常情况,我们一般都会同时进行全局安装和本地安装,至于你选用本地包还是全局包,就看个人习惯了~总之,只要能找到正确的 webpack 路径,都是能够正常编译的。
全局安装
4.x 版本,webpack 安装过程被拆分为 webpack 和 webpack-cli 两个包。
npm install webpack webpack-cli -g
复制代码
如果你想追求速度,可以通过安装 cnpm 工具,从中国淘宝镜像源进行安装。
cnpm install webpack webpack-cli -g
复制代码
本地安装
npm install webpack webpack-cli -D
复制代码
或者
cnpm install webpack webpack-cli -D
复制代码
验证安装
成功安装之后,我们可以验证下是否成功。
- 验证全局
webpack -v
复制代码
- 验证本地
node_modules/.bin/webpack -v
//或者
node node_modules/webpack/bin/webpack -v
复制代码
执行完能够正常打印版本号,说明安装成功。
第一次使用。
webpack4.x 默认的入口文件是 src目录下的 index.js 文件,默认的出口文件是dist 目录下的 main.js 文件。
简单使用
1、新建src目录,增加一个 index.js 文件。
mkdir src & touch index.js
复制代码
2、编辑 index.js,随便输入两句代码:
console.log('第一次')。
复制代码
3、执行全局 webpack 命令或者执行本地 webpack 命令。
- 使用全局下的 webpack 执行编译
webpack
复制代码
一句 webpack ,即可将 src 目录下的 index.js 文件,编译输出到 dist 目录下的 main.js 文件。
- 使用本地下的 webpack 执行编译
node node_modules/webpack/bin/webpack
复制代码
可见,本地编译需要些的命令比较长,因为需要按照路径查找webpack。
webpack 环境
- webpack 默认使用的是生产环境编译方式,即当我们执行
webpack
命令的时候,实际上等价于webpack --mode production
,生产环境编译方式会进行压缩混淆操作。 - 当我们在开发阶段时,往往需要配置编译方式为开发阶段,可通过如下命令执行:
webpack --mode development 复制代码
开发阶段编译后的文件是不会进行压缩混淆操作的,可读性比较好,调试起来也比较方便。
改变入口文件
实际应用中,我们的默认入口文件可能不是 src 下的 index.js 文件,所幸的是,webpack 支持配置入口文件和出口文件。
配置入口文件。
我们可以在 webpack 后增加一个参数代表入口文件webpack {入口文件}
。
webpack ./src/app.js
复制代码
webpack 后的第一个参数代表入口文件,我们将它改为 ./src/app.js,执行命令会发现,webpack 将该文件编译到了默认的出口文件dist/main.js。
改变出口文件
改变出口文件可以使用如下命令实现:webpack {入口文件} -o {出口文件}
webpack ./src/app.js -o ./bundle/main.js
复制代码
执行命令会发现,输出文件是 bundle 目录下的 main.js 。
配置 babel
和webpack 结合的最紧密的当属 babel 了。babel 分为 babel-core
和 babel-loader
两个包。即使分成了两个包,这两个包在版本使用上要注意配套。
请注意:babel-core 7.x 版本的包名是 @babel/core。
babel-loader 7.x 和 babel-core 6.x。
采用babel-loader 7.x 时,需要安装 babel-preset-env 和 babel-preset-react插件,进行 ES6 和 React 的转译工作。
cnpm install babel-loader babel-core babel-preset-env babel-preset-react -D
复制代码
- .babelrc 中配置
- env
- react
babel-loader 8.x 和 @babel/core 7.x。
采用babel-loader 8.x 时,需要安装 @babel/preset-env 和 @babel/preset-react插件,进行 ES6 和 React 的转译工作。
cnpm install babel-loader @babel/core @babel/perset-env @babel/preset-react -D
复制代码
- .babelrc 中 配置
- @babel/preset-env
- @babel/preset-react 配置好后就可以很happy地使用 webpack4.x 进行开发了。
webpack-dev-server
配置好转译插件之后,我们就可以使用 ES6 开发 React 项目了,但是我们还是需要一些提高开发效率的工具,比如 webpack-dev-server,它能够
- 在本地开启一个静态服务器,使得我们可以通过域名(localhost 或者127.0.0.1或者自己配置的 host 域名)的方式访问本地开发目录的页面和静态资源。
- 让我们在保存文件的同时自动编译。
- 无刷新更新浏览器中的模块。
我们看下webpack-dev-server 如何配置
module.exports = {
devServer: {
contentBase: path.join(__dirname, "/dist")
}
}
复制代码
上例我们只配置了一个属性 contentBase,它代表了webpack-dev-server开启的静态服务器的根目录,webpack-dev-server启动一个服务器之后,默认端口是8080,当我们访问 localhost:8080 时,webpack-dev-server 会去 dist 目录寻找静态资源文件。
webpack-dev-server还有一些其他配置,比如热更新。
node_modules/.bin/webpack-dev-server --hot
复制代码
当然 webpack-dev-server 还有很多特别棒的配置,这里就不一一细说了,大家可以去网上参考一些资料进行配置,如果有什么不太懂的,可以留言咨询~~
完整的 package.json
以下是一个完整的 package.json。
{
"name": "webpack-demo",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "node_modules/.bin/webpack-dev-server --hot"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@babel/core": "^7.4.5",
"@babel/preset-env": "^7.4.5",
"@babel/preset-react": "^7.0.0",
"babel-loader": "^8.0.6",
"css-loader": "^2.1.1",
"react": "^16.8.6",
"react-dom": "^16.8.6",
"style-loader": "^0.23.1",
"webpack": "^4.32.2",
"webpack-cli": "^3.3.2",
"webpack-dev-server": "^3.5.1"
}
}
复制代码
完整的 .babelrc
{
"presets": [
"@babel/preset-env",
"@babel/preset-react"
]
}
复制代码
完整的 webpack-config.json 文件
var path = require('path');
module.exports = {
output: {},
module: {
rules: [
{
test: /(\.jsx|\.js)$/,
exclude: '/node_modules',
use: { loader: "babel-loader" }
},
{
test: /\.css$/,
exclude: '/node_modules',
use: [{
loader: 'style-loader'
}, { loader: "css-loader" }]
}
]
},
devServer: {
contentBase: path.join(__dirname, "/dist")
}
}
复制代码
大家拷贝这三个配置文件之后,执行 npm install 即可安装 webpack 4.x 的相关依赖了,省去了配置时的各种报错信息,大大节约了配置时间,希望能给大家带来帮助~