plugin
是webpack
核心功能,經過plugin(插件)webpack
能夠實現loader
所不能完成的複雜功能,使用plugin
豐富的自定義API
,能夠控制webpack
編譯流程的每一個環節, 實現對webpack
的自定義功能擴展。
咱們實際項目中就使用了HtmlWebpackPlugin
插件,它幫助咱們作了下面幾件事兒:javascript
html
模板文件CSS/JS
也都會被自動引入到這個html
模板文件中hash
添加在引入文件地址的末尾,相似於咱們經常使用的時間戳,來解決可能會遇到的緩存問題。項目打包後生成的模板文件以下:css
<!DOCTYPE html> <html> <head> <meta charset=utf-8> <title>移山</title> <link rel=icon href=/static/assets/favicon.ico type=image/x-icon> <link href=/static/css/app.37f937e3e08602bbb89778796e294cf1.css rel=stylesheet> </head> <body> <div id=app> </div> <script type=text/javascript src=/static/js/manifest.2ae2e69a05c33dfc65f8.js></script> <script type=text/javascript src=/static/js/vendor.d903c30c8b95cb48653b.js></script> <script type=text/javascript src=/static/js/app.0c675ae0a3c300e0af57.js></script> </body> </html>
plugin
是一個具備apply
方法的js
對象。apply
方法會被webpack
的compiler
(編譯器)對象調用,而且compiler
對象可在整個compilation
(編譯)生命週期內訪問。
一個plugin
看起來大概是這個樣子:html
function CustomPlugin(options){ // options是配置文件,你能夠在這裏進行一些與options相關的工做 } // 每一個plugin都必須定義一個apply方法,webpack會自動調用這個方法 CustomPlugin.prototype.apply = function(compiler){ ...... }); } module.exports = CustomPlugin;
有興趣對自定義插件感興趣,想了解的更多的,能夠看這裏。java
在 webpack
配置文件(webpack.config.js
)中,向 plugins
屬性傳入 new
實例便可。好比:webpack
const HtmlWebpackPlugin = require('html-webpack-plugin'); const webpack = require('webpack'); module.exports = { module: { loaders: [ { test: /\.(js|jsx)$/, loader: 'babel-loader' } ] }, plugins: [ new webpack.optimize.UglifyJsPlugin(), //訪問內置的插件 new HtmlWebpackPlugin({template: './src/index.html'}) //訪問第三方插件 ] };
webpack
中的插件分爲內置插件和第三方插件npm install html-webpack-plugin --save-dev
在對plugin
有了一個基本認識後,來作一個小案例:git
「我想對全部的文件打包後添加一個版權聲明」
webpackPluginDemo
的目錄結構以下:
├── app
├── package-lock.json
├── package.json
├── src
│ └── index.js
└── webpack.config.jsgithub
webpack
在webpackPluginDemo
根目錄下安裝webpack:
web
npm install --save-dev webpack
index.js
document.write('webpack系列之plugin的基本使用!');
webpack
配置文件webpack.config.js
const webpack = require('webpack') module.exports = { entry: __dirname + "/src/index.js", //入口文件 output: { path: __dirname + "/app", //打包後的文件存放的地方 filename: "bundle.js" //打包後輸出文件的文件名 }, plugins: [ new webpack.BannerPlugin('版權全部,翻版必究') ], }
注意:BannerPlugin
爲內置插件,若是是其它的外置插件,則需在使用前要先安裝。npm
➜ webpackPluginDemo webpack Hash: 16453f43abe665633286 Version: webpack 2.4.1 Time: 70ms Asset Size Chunks Chunk Names bundle.js 2.86 kB 0 [emitted] main [0] ./src/index.js 210 bytes {0} [built]
打包成功,能夠看到app
目錄下面已經生成了bundle.js
,打開bundle.js
會發現版權信息已經加上了:json