終於學習了一下webpack
webpack 是前端的一個項目構建工具,它是基於Node.js開發出來的一個前端工具。WebPack能夠看作是模塊打包機(bundler),經過分析項目結構,找到JavaScript模塊以及其它的一些瀏覽器不能直接運行的拓展語言(Scss,TypeScript等),並將其打包爲合適的格式以供瀏覽器使用。javascript
Gulp/Grunt是基於task任務的一種可以優化前端的開發流程的工具,而WebPack是一種模塊化的解決方案,是基於整個項目進行構建的。Gulp/Grunt在一個配置文件中,指明對某些文件進行相似編譯,組合,壓縮等任務的具體步驟,工具以後能夠自動替你完成這些任務。如圖:
而webpack把你的項目當作一個總體,經過一個給定的主文件(如:index.js),Webpack將從這個文件開始找到你的項目的全部依賴文件,使用loaders處理它們,最後打包爲一個(或多個)瀏覽器可識別的JavaScript文件。如圖:
Webpack的優勢使得Webpack在不少場景下能夠替代Gulp/Grunt類的工具。css
webpack自己只能加載js/json模塊,若是要加載其它類型的文件/模塊, 就須要使用對應的loader進行轉化和加載。
loader能夠將全部類型的文件轉換爲webpack 可以處理的有效模塊,而後你就能夠利用 webpack 的打包能力,對它們進行處理。
loader通常以 xxx-loader 的方式命名,xxx表明了這個loader要作的轉化功能,好比:css-loader,json-loader等。html
全局安裝:npm i webpack -g
項目依賴:npm i webpack --save-dev
前端
webpack01.htmljava
<body> <div id="test"> 哈哈哈 </div> <script type="text/javascript" src="js/test.js"></script> </body>
test.jsjquery
import $ from 'jquery'; import '../css/common.css'; $(function () { $('#test').addClass("test"); });
經過命令打包:webpack
webpack js/test.js --output dist/bundle.js --mode development
打包完成後項目下多出dist文件夾,把webpack01.html拷貝進去,在頁面上訪問,能夠出現相同效果
webpack把全部依賴打包成一個bundle.js文件,經過代碼分割成單元片斷並按需加載。關於webpack打包原理學習於:https://blog.csdn.net/baozhiq...web
除了以上經過命令來打包,還能夠經過配置文件配置webpack的入口文件等等信息,在終端直接執行webpack便可打包。
webpack.config.js正則表達式
const path = require('path'); module.exports = { mode: 'production', // 入口文件配置 entry: './js/test.js', // 輸出配置 output: { // 出口文件 filename: 'bundle.js', // 設置全路徑 path: path.resolve(__dirname, 'dist') }, module: { // 規則數組, 裏面的每個對象都是在描述一個loader rules: [ { //css文件加載,正則表達式css文件的路徑 test: /\.css$/, use: [ 'style-loader', 'css-loader' ] }, { ////圖片文件加載 test: /\.(png|jpg|gif)$/, use: [ { loader: 'file-loader', query: { name: 'img/[name]-[hash:5].[ext]' } }, ], }, ] }, devServer:{ contentBase: './dist' } };
關於配置文件詳解來自於:https://blog.csdn.net/qq_3977...npm
webpack打包css文件須要添加style-loader和css-loader模塊:npm install css-loader style-loader --save-dev
(或者經過配置文件引入)
css-loader讓咱們能使用相似@import和url(...)的方法實現require()的功能,style-loader將全部的計算後的樣式加入頁面中,兩者組合在一塊兒可以把樣式表嵌入webpack打包後的JS文件中。關於測試代碼,上面示例已展現。
插件(Plugins)是用來拓展Webpack功能的,它們會在整個構建過程當中生效,執行相關的任務。
該插件依據一個簡單的模板,幫你生成最終的Html5文件,這個文件中自動引用了你打包後的JS文件。
經過`npm install --save-dev html-webpack-plugin
命令安裝。
webpack.config.js的配置:
使用:刪除掉原先打包編譯生成的dist文件夾,從新執行webpack,該插件會自動根據指定的模板頁面幫助咱們建立index.html文件,並作好相關配置引入。
webpack-dev-server提供了一個簡單的web服務器,而且可以實時從新加載(live reloading)。
經過npm install --save-dev webpack-dev-server
命令安裝。
webpack.config.js的配置:
編譯打包:
package.json中
"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "webpack-dev-server --open", "build": "babel js --out-dir lib" }
終端執行npm start
便可。