05使用plugin
使用Plugin
DefinePlugin
内置插件,可直接用webpack.DefinePlugin获取
该插件用于创建一些在编译时可配置的全局常用,这些常量值我们可以在webpack配置中去指定,如:
js
module.exports = {
plugins: [
new webpack.DefinePlugin({
// const isDev = 'true'
isDev: JSON.stringify(true),
// const VERSION = 'fridolph'
VERSION: JSON.stringify('fridolph'),
COMMON_OBJ: {
ARRAY: [1,2,3],
PERSON: {name: 'fri', age: 24}
}
})
]
}有了上面的配置,就可以在应用中直接访问配置好的常量了。
- 如果配置的值是字符串,那么整个字符串会被当成代码片段来执行,其结果作为最终变量的值,如上面的 "1+1",最后的结果是 2
- 如果配置的值不是字符串,也不是一个对象字面量,那么该值会被转为一个字符串,如 true,最后的结果是 'true'
- 如果配置的是一个对象字面量,那么该对象的所有 key 会以同样的方式去定义
copy-webpack-plugin
如名字,就是用来复制的。若 有些文件没经过webpack处理,但希望它也能出现在build目录下,则可这么配置:
js
const CopyWebpackPlugin = require('copy-webpack-plugin')
module.exports = {
plugins: [
new CopyWebpackPlugin([
{ from: 'src/file.txt', to: 'build/file.txt' },
{ from: 'src/*.ico', to: 'build/*.ico' }
// 可以配置很多项复制规则
])
]
}更多参考 copy-webpack-plugin
extract-text-webpack-plugin
用来把依赖的css分离出来成单独文件:
有的时候构建入口不止一个,extract-text-webpack-plugin 会为每一个入口创建单独分离的文件,因此最好这样配置:
js
plugins: [
new ExtractTextPlugin('[name].css')
]ProvidePlugin
该组件用于引用某些模块作为应用运行时的变量,从而不必每次都用 require 或者 import,其用法相对简单:
js
new webpack.ProvidePlugin({
identifier: 'module'
})
// 或者
new webpack.ProvidePlugin({
identifier: ['module', 'property']
// 即引用module下的property,类似于
// import {property} from 'module
})当 identifier 被当作未赋值的变量时,module 就会被自动加载了,而 identifier 这个变量即 module 对外暴露的内容。
注意,如果是 ES 的 default export,那么你需要指定模块的 default 属性:identifier: ['module', 'default']
IgnorePlugin
IgnorePlugin和ProvidePlugin一样,也是webpack内置的
该插件用于忽略某些特定模块,让webpack不把这些指定的模块打包进去。例如,使用moment.js,直接引用后,李敏啊有大量i18n代码,导致最后打包出来文件较大,可如下配置:
js
module.exports = {
plugins: [
new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/)
]
}IgnorePlugin配置参数有两个:
- 匹配引入模块路径的正则表达式
- 匹配模块的对应上下文,即所在目录名
