这次在项目中使用了React,并使用webpack来打包js文件,gulp来编译stylus等其他事情。
最开始我们想达到的效果,希望能够根据webpack能够把reactjs打包成项目可以使用的文件,在项目目录中新建webpack.config.js文件
1 | var path = require('path'); |
Webpack的一些命令:
1 | $ webpack --config XXX.js //使用另一份配置文件(比如webpack.config2.js)来打包 |
但是这样打包出来的文件会很大,
这个可以使用webpack的externals来设置webpack将依赖的库指向全局变量,从而不导入这个js文件。
但是如果引用的包比较多的情况下,维护起来会比较麻烦,所以使用webpack的dll plugin来解决这个问题。
使用这个功能需要把打包过程分成两步:
- 打包ddl包
- 引用ddl包,打包业务代码
首先建一个,webpack.dll.config.js文件
1 | var webpack = require('webpack'); |
webpack.DllPlugin 的选项中:
path 是 manifest.json 文件的输出路径,这个文件会用于后续的业务代码打包;
name 是 dll 暴露的对象名,要跟 output.library 保持一致;
context 是解析包路径的上下文,这个要跟接下来配置的 webpack.config.js 一致。
PS:自己用gulp来执行的webpack打包,只打出来vendor文件,没有出来manifest.json,改用webpack命令打包就好了。
运行之后会生成两个文件,一个是所有引用的js文件,另一个是manifest.json:1
2
3
4
5
6
7
8
9➜ webapp git:(dev_jerome) ✗ ./node_modules/.bin/webpack --config webpack.dll.config.js
Hash: fd919a411af8bb56f919
Version: webpack 1.13.2
Time: 2389ms
Asset Size Chunks Chunk Names
vendor.dll.js 1.6 MB 0 [emitted] vendor
[0] dll vendor 12 bytes {0} [built]
+ 533 hidden modules
➜ webapp git:(dev_jerome) ✗
再在原来的webpack.config文件里面增加DllReferencePlugin的配置,需要注意的是这里面的context需要和dll.config里面的context一样。
1 | var path = require('path'); |
webpack.DllReferencePlugin 的选项中:
context 需要跟之前保持一致,这个用来指导 Webpack 匹配 manifest.json 中库的路径;
manifest 用来引入刚才输出的 manifest.json 文件。
DllPlugin 本质上和我们手动分离第三方库是一样的,但是对依赖包极多的项目来说,自动化明显加快了生产效率。
可以在package.json里面设置运行脚本,如果依赖的脚本没有变化的话可以只用执行bundle任务。1
2
3
4"scripts": {
"build": "webpack --config webpack.dll.config.js && gulp bundle",
"bundle": "./node_modules/.bin/gulp bundle"
}
下面是依赖的gulp文件
1 | var gulp = require('gulp'); |
参考文章: 如何十倍提高你的webpack构建效率