Webpack入門

Webpack官網(wǎng)
Webpack在github上的首頁
在releases下面可以看到所有發(fā)布的版本。

一、npm

設(shè)置npm,讓下載更快。在git Bash下運(yùn)行如下命令:

npm config set loglevel http // 知道npm 發(fā)的每一個(gè)請(qǐng)求
npm config set progress false // 關(guān)閉進(jìn)度條
npm config set registry https://registry.npm.taobao.org/ // 從淘寶的服務(wù)器下載各種包
touch ~/.bashrc; echo 'export PHANTOMJS_CDNURL="http://npm.taobao.org/mirrors/phantomjs"' >> ~/.bashrc // 讓 npm 從淘寶下載 phantomjs
touch ~/.bashrc; echo 'export SASS_BINARY_SITE="https://npm.taobao.org/mirrors/node-sass"' >> ~/.bashrc // 讓 npm 從淘寶下載 SASS
source ~/.bashrc

二、Creating a bundle

mkdir webpack-demo && cd webpack-demo //  創(chuàng)建webpack-demo目錄,并進(jìn)入此目錄
npm init -y // 創(chuàng)建了一個(gè) package.json 文件
npm install --save-dev webpack // 安裝webpack

運(yùn)行完之后如果出現(xiàn)滿滿的英文,就是webpack安裝成功了。

  • app/index.js
mkdir app && cd app // 創(chuàng)建app目錄,并進(jìn)入此目錄
touch index.js

編輯index.js文件

function component () {
  var element = document.createElement('div');
  /* lodash is required for the next line to work */
  element.innerHTML = _.join(['Hello','webpack'], ' ');  // _.join是lodash 暴露的全局變量
  return element;
}
document.body.appendChild(component());
touch index.html // 不是在app目錄下面

此時(shí)的文件結(jié)構(gòu)

.
├── app
│   └── index.js
├── index.html
└── package.json

編輯index.html

<html>
  <head>
    <title>webpack 2 demo</title>
    <script src="https://unpkg.com/lodash@4.16.6"></script>  // 使用 script 引入了 lodash v4.16.6。也可以在webpack-demo目錄下運(yùn)行npm install --save lodash,lodash 的源代碼就被下載到 ./node_modules/lodash/ 目錄中
  </head>
  <body>
    <script src="app/index.js"></script>
  </body>
</html>

注:Lodash是一個(gè)著名的javascript原生庫,不需要引入其他第三方依賴。是一個(gè)意在提高開發(fā)者效率,提高JS原生方法性能的JS庫。
在 app/index.js 的第一行添加

import _ from 'lodash';

把a(bǔ)pp/index.html改掉

<html>
   <head>
     <title>webpack 2 demo</title>
 -   <script src="https://unpkg.com/lodash@4.16.6"></script> //刪除
   </head>
   <body>
 -    <script src="app/index.js"></script>
 +    <script src="dist/bundle.js"></script> // 新增
   </body>
 </html>

在控制臺(tái)運(yùn)行:

./node_modules/.bin/webpack app/index.js dist/bundle.js // 將 app/index.js 變成 dist/bundle.js

打開index.html。如果出現(xiàn)“Hello webpack”,則說明成功。

  • 文件整體結(jié)構(gòu)
.
├── app
│   └── index.js
├── dist
│   └── bundle.js
├── index.html
├── node_modules/
└── package.json

幾點(diǎn)說明:
1.index.html里面引用的是dist/bundle.js。
2.lodash 被安裝在 node_modules 里面。
3.webpack也被安裝在node_modules里,./node_modules/.bin/webpack是一個(gè)可執(zhí)行文件。
4.webpack和lodash的版本號(hào)都被寫在package.json里面。

三、modify

  • 初步改進(jìn)
  • 引入jQuery
npm i -S jquery // 在webpack-demo目錄下,npm install --save jquery

這樣jQuery就被下載到node_modules里面。
接著在app/index.js里面引入jQuery。

import _ from 'lodash'
+import j from 'jquery'
 function component () {
\-  var element = document.createElement('div');
\+  var element = j('<div></div>');
   /* lodash is required for the next line to work */
\-  element.innerHTML = _.join(['Hello','webpack'], ' ');
\+  element.html(_.join(['Hello','webpack'], ' '))
\-  return element;
\+  return element.get(0);
 }
document.body.appendChild(component());

在終端運(yùn)行:

./node_modules/.bin/webpack app/index.js dist/bundle.js

在瀏覽器打開index.html,如果看到“Hello webpack”,說明成功引入jquery。
關(guān)于bundle.js里面的內(nèi)容,下次再另外介紹。

  • 進(jìn)一步改進(jìn)
    因?yàn)槊看味家\(yùn)行./node_modules/.bin/webpack app/index.js dist/bundle.js,很麻煩,所以官網(wǎng)也給出了辦法。
    在根目錄下(webpack-demo),新建并編輯 webpack.config.js。
var path = require('path');
module.exports = {
  entry: './app/index.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist')
  }
};

上面的./node_modules/.bin/webpack app/index.js dist/bundle.js就可以換成./node_modules/.bin/webpack --config webpack.config.js。
此時(shí)的命令依然很長,還可以修改package.json文件。

"scripts": {
\-    "test": "echo \"Error: no test specified\" && exit 1"
\+    "test": "echo \"Error: no test specified\" && exit 1",
\+    "build": "webpack"
   },
   "keywords": [],

增加了一個(gè)build,內(nèi)容為webpack。
運(yùn)行npm run build。
npm run bulid等于node_modules里的webpack可執(zhí)行文件,這個(gè)可執(zhí)行文件會(huì)自己去 webpack.config.js 里找 app/index.js、dist 和 bundle.js 三個(gè)關(guān)鍵詞。

  • 減小bundle.js體積
    因?yàn)榇a沒壓縮,導(dǎo)致bundle.js文件很大。webpack 自帶了一個(gè)壓縮插件 UglifyJsPlugin,只需要在配置文件中引入即可。
var path = require('path');
var webpack = require('webpack');
module.exports = {
  entry: './app/index.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist')
  },
  plugins: [
    new webpack.optimize.UglifyJsPlugin({
      compress: {
        warnings: false
      }
    })
  ]
};
壓縮前

壓縮后

也可以修改build腳本。

"scripts": {
     "test": "echo \"Error: no test specified\" && exit 1",
 -    "build": "webpack"
 +    "build": "webpack -p"
   },

運(yùn)行./node_modules/.bin/webpack --help可以看到:

-p

官網(wǎng)的解釋
這個(gè)命令會(huì)做三件事:

  • 使用webpack自帶的UglifyJsPlugin壓縮插件將代碼進(jìn)行壓縮,減小體積;
  • 運(yùn)行l(wèi)oader-options-plugin,它的用途是幫助人們從 webpack 1 遷移至 webpack 2;
  • 設(shè)置node的環(huán)境變量。

四、watch

watch: webpack 監(jiān)聽文件變動(dòng),一旦我們保存了文件,重新 build 代碼。
Development
往下翻到webpack Watch Mode。在package.json文件中修改:

"scripts": {
     "test": "echo \"Error: no test specified\" && exit 1",
+    "dev": "webpack --progress --watch"
},
"keywords": [],

運(yùn)行npm run dev。打開 index.html, 編輯 app/index.js,把 Hello 改成 Hi。這時(shí)候 webpack 會(huì)自動(dòng) build ,刷新頁面,就會(huì)出現(xiàn)Hi webpack。
如果要自動(dòng)刷新,可以再往下翻到webpack-dev-server。
修改index.html:

<script src="/bundle.js"></script>

安裝webpack-dev-server:npm install --save-dev webpack-dev-server,再運(yùn)行:node_modules/.bin/webpack-dev-server。
此時(shí)不能直接打開index.html,因?yàn)槁窂讲粚?duì)。打開http://localhost:8080 即可看到Hi webpack。
代碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容