1. 程式人生 > >webpack入坑之旅(一)不是開始的開始

webpack入坑之旅(一)不是開始的開始

targe base 增加 -i pre 版本 uil 靜態頁 obi

最近學習框架,選擇了vue,然後接觸到了vue中的單文件組件,官方推薦使用 Webpack + vue-loader構建這些單文件 Vue 組件,於是就開始了webpack的入坑之旅。
因為原來沒有用過任何的構建工具與模塊化工具,所以本系列會十分的基礎。並且可能有很多不正確的地方,希望大家諒解,並指出錯誤幫助改進。謝謝!

什麽是webpack

Webpack 是德國開發者 Tobias Koppers 開發的模塊加載器兼打包工具,在webpack中,它能把各種資源,例如JS(含JSX)、coffee、樣式(含less/sass)、圖片等都作為模塊來使用和處理。因此, Webpack 當中 js 可以引用 css, css 中可以嵌入圖片 dataUrl。
對應各種不同文件類型的資源, Webpack 有對應的模塊 loader比如vue用的是vue-loader

當然這是後話,在後面我們再來說。

請看下圖:
技術分享圖片

https://github.com/webpack/webpack

安裝

前提:因為webpack是一個基於node的項目,所以首先需要確保你的電腦裏面已經安裝了node.js,以及npm。在這裏我使用的版本是:node:v8.11.2 ,npm:6.2.0,若是版本問題,請更新到最新版。
若是有出現npm安裝過慢的情況,可以使用nrm這個項目來進行npm源地址的切換。或者使用使用淘寶出品的 cnpm

首先我們直接進行全局的安裝,運行如下命令:npm install webpack webpack-cli -g,可能需要一點時間。

安裝成功後,在命令行輸入webpack -h

即可查看當前安裝的版本信息。以及可以使用的指令。

當然,我們都應該將webapck安裝到當前的項目依賴中,此時就可以使用項目的本這樣就可以使用項目本地版本的 Webpack。

1
2
3
4
5
6
7
8
9
10
11
# 確保已經進入項目目錄
# 確定已經有 package.json,沒有就通過
npm init
# 創建,直接一路回車就好,後面再來詳細說裏面的內容。
# 安裝 webpack 依賴

npm install webpack webpack-cli --save-dev
# 簡單的寫法:-_-,縮寫形式
npm i webpack webpack-cli -D
# –save:模塊名將被添加到dependencies,可以簡化為參數-S。
# –save-dev: 模塊名將被添加到devDependencies,可以簡化為參數-D。

安裝好之後我們的package.json的目錄應該是這樣的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"name": "first-demo",
"version": "1.0.0",
"description": "this is my first-demo",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "guowenfh",
"license": "MIT",
"dependencies": {},
"devDependencies": {
"webpack": "^4.16.4",
"webpack-cli": "^3.1.0"
}
}

既然環境都已經安裝好了,那麽我們就開始來用webpack進行我們的第一個打包運行程序吧!

首先創建一個靜態頁面 index.html 和一個 JS 入口文件 entry.js,(這裏你想用什麽名字都可以,只需要在打包的時候讀取文件為該名字就好,不過,到時候就知道這個名字的含義啦!):

1
2
3
4
5
6
7
8
9
10
11
<!-- index.html -->
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<h1 id="app"></h1>
<script src="./dist/bundle.js"></script>
<!-- 註意這裏引入的不是我們創建的文件,而是用webpack生成的文件 -->
</body>
</html>
1
2
/*** entry.js ***/
document.getElementById(‘app‘).innerHTML="這是我第一個打包成功的程序";

文件都已經創建成功了,那麽就開始我們的打包吧!

由於我們將 webpack 安裝在了 項目目錄。所以是不會向終端寫入 webpack 命令的,這時我們可以像 npm script 中加入命令 :

1
2
3
"scripts": {
"start": "webpack entry.js --output-filename=./bundle.js --mode=development"
},

然後我們運行 npm run start,就會執行 webpack entry.js --output-filename=./bundle.js --mode=development

或者我們可以借用 npm 內置的執行器做到同樣的事情 npx webpack entry.js --output-filename=./bundle.js --mode=development

在瀏覽器中打開index.html,就能看到我們設置的文字啦!:這是我第一個打包成功的程序

這麽簡單的功能直接在html中引入不就好了嗎?確實是這樣的,不過我們這才剛剛開始嘛,不要急。

下面我們再來增加一個文件,名為first.js內容如下:

1
2
3
var h2= document.createElement("h2")
h2.innerHTML="不是吧,那麽快第二個打包程序啦!";
document.body.appendChild(h2);

更改 entry.js:

1
2
3
document.getElementById(‘app‘).innerHTML="這是我第一個打包成功的程序";
//添加
require("./first.js");

再來進行一次重復的工作,再打包一次。webpack entry.js --output-filename=./bundle.js --mode=development,如果成功,打包過程會顯示日誌:

1
2
3
4
5
6
7
Hash: b1cfe7ff9d75ce235dc9
Version: webpack 1.12.14
Time: 54ms
Asset Size Chunks Chunk Names
bundle.js 1.82 kB 0 [emitted] main
[0] ./entry.js 208 bytes {0} [built]
[1] ./first.js 145 bytes {0} [built]

Webpack 會分析入口文件,解析包含依賴關系的各個文件。這些文件(模塊)都打包到 bundle.jsWebpack 會給每個模塊分配一個唯一的 id 並通過這個 id 索引和訪問模塊。在頁面啟動時,會先執行 entry.js 中的代碼,其它模塊會在運行 require 的時候再執行。

刷新瀏覽器,可以發現我們的剛剛的代碼已經生效,又有了新的文字出現。

  • 本文作者: guowenfh
  • 本文鏈接: http://guowenfh.github.io/2016/03/24/vue-webpack-01-base/

webpack入坑之旅(一)不是開始的開始