背景
webpack 是一个模块打包器,用于编译 JavaScript 模块。
初体验
安装
mkdir webpack-demo && cd webpack-demo npm init -y npm install --save-dev webpack webpack-cli
查看版本: 本文中版本为 4.25.1
$ node_modules/.bin/webpack -v 4.25.1
说明:
安装一个要打包到生产环境的安装包时,你应该使用 npm install --save
安装一个用于开发环境的安装包(例如,linter, 测试库等),你应该使用 npm install --save-dev
无 webpack 时的页面文件
两个文件
index.html src └── src/index.js
index.html
index.html
,内容如下:
<!doctype html> <html> <head> <title>起步</title> <script src="https://unpkg.com/lodash@4.16.6"></script> </head> <body> <script src="./src/index.js"></script> </body> </html>
src/index.js
src/index.js
内容如下:
function component() { var element = document.createElement('div'); // Lodash(目前通过一个 script 脚本引入)对于执行这一行是必需的 element.innerHTML = _.join(['Hello', 'webpack'], ' '); return element; } document.body.appendChild(component());
效果验证
用浏览器打开 index.html
,效果如下:
Hello webpack
适配到 webpack 上
安装 lodash
上面是通过 script 脚本引入的外部 lodash 库。
这里我们希望把 lodash 打包到本地的 js 文件中,不再依赖外部 js 脚本。
因此先安装 lodash 库。
$ npm install --save lodash
因为 lodash 要发布,所以用为 --save
。如果只用于开发而不发布的话,那就用 --save-dev
dist/index.html
将 index.html 移动到 dist 目录下,内容如下:
<!doctype html> <html> <head> <title>起步</title> </head> <body> <script src="main.js"></script> </body> </html>
src/index.js
src/index.js,内容如下:
import _ from 'lodash'; function component() { var element = document.createElement('div'); // Lodash, now imported by this script element.innerHTML = _.join(['Hello', 'webpack'], ' '); return element; } document.body.appendChild(component());
打包
$ npx webpack Hash: b75da8f7583b35825ca3 Version: webpack 4.25.1 Time: 2828ms Built at: 11/17/2018 11:57:02 AM Asset Size Chunks Chunk Names main.js 70.5 KiB 0 [emitted] main Entrypoint main = main.js [1] ./src/index.js 264 bytes {0} [built] [2] (webpack)/buildin/global.js 489 bytes {0} [built] [3] (webpack)/buildin/module.js 497 bytes {0} [built] + 1 hidden module
可见生成了 dist/main.js
文件
效果验证
用浏览器打开 index.html
,效果如下:
Hello webpack
同时,通过检查,可以看到没有对外部 js 文件的请求。
原理
执行 npx webpack
打包里,会将 入口起点
下的脚本,打包到 输出
目录下。
如果不使用默认值的话,我们可以通过配置文件来指定其具体的值。
定制配置
如果我们要输出到 bundle.js
文件,而不是 main.js
文件,则可以这样做:
编辑文件 webpack.config.js
,内容如下:
const path = require('path'); module.exports = { entry: './src/index.js', output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist') } };
执行打包
npx webpack --config webpack.config.js Hash: 33fcbd13f7bbedec8155 Version: webpack 4.25.1 Time: 2723ms Built at: 11/17/2018 12:14:50 PM Asset Size Chunks Chunk Names bundle.js 70.5 KiB 0 [emitted] main Entrypoint main = bundle.js [1] ./src/index.js 264 bytes {0} [built] [2] (webpack)/buildin/global.js 489 bytes {0} [built] [3] (webpack)/buildin/module.js 497 bytes {0} [built] + 1 hidden module
可见生成了 dist/bundle.js
文件。
使用 npm 脚本打包
除了使用这样 cli 方式进行打包外,还可以更方便的使用 npm 脚本进行打包。
编辑 package.json
文件,增加 script.build
一行,如下:
{ "name": "webpack-demo", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "build": "webpack" }, "keywords": [], "author": "", "license": "ISC", "devDependencies": { "webpack": "^4.25.1", "webpack-cli": "^3.1.2" }, "dependencies": { "lodash": "^4.17.11" } }
打包:
npm run build > webpack-demo@1.0.0 build /Users/note/web/webpack-demo > webpack Hash: 33fcbd13f7bbedec8155 Version: webpack 4.25.1 Time: 368ms Built at: 11/17/2018 12:24:04 PM Asset Size Chunks Chunk Names bundle.js 70.5 KiB 0 [emitted] main Entrypoint main = bundle.js [1] ./src/index.js 264 bytes {0} [built] [2] (webpack)/buildin/global.js 489 bytes {0} [built] [3] (webpack)/buildin/module.js 497 bytes {0} [built] + 1 hidden module
可见同时使用了 webpack.config.js
文件,生成了 bundle.js
文件。
下一步
更详细的配置,请参见原文 webpack 中文文档
参考
- webpack 对比
- webpack 起步
- Webpack 掉坑之路(1)——HelloWorld(基于 npm,react): 还没看,准备看
- 入门 Webpack,看这篇就够了: 还没看,准备看
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于