javascript跟其餘開發語言有不少的區別,其中一個就是沒有模塊化概念,若是一個項目中有多個js文件,咱們只能經過script標籤引入的方式,把一個個js文件插入到頁面,這種作法會也引發了不少弊端:javascript
模塊化很容易就避免這些問題,避免衝突,合併資源減小網絡開銷,經過導入和導出語句咱們能夠清晰地看到模塊間的依賴關係。html
模塊打包工具(module bundler)的任務就是解決模塊間的依賴,使其打包後的結果能運行在瀏覽器上。它的工做方式主要分爲兩種:java
目前社區中比較流行的模塊打包工具備Webpack、Parcel、Rollup等。node
Webpack是一個開源的JavaScript模塊打包工具,其最核心的功能是解決模塊之間的依賴,把各個模塊按照特定的規則和順序組織在一塊兒,最終合併爲一個JS文件(有時會有多個,這裏討論的只是最基本的狀況)。這個過程就叫做模塊打包webpack
安裝Webpack以前,須要安裝最新版本的node.js,它須要依賴node.js,使用 Node.js 最新的長期支持版本(LTS - Long Term Support),使用舊版本的node.js,可能會遇到一些問題,由於它們可能缺乏 webpack 功能以及/或者缺乏相關 package 包。web
咱們使用node.js的包管理器npm安裝Webpack,安裝Webpack有兩種方式:npm
1.全局安裝:json
npm install --g webpack
複製代碼
2.本地安裝瀏覽器
npm install --save-dev webpack
複製代碼
若是你使用 webpack 4+ 版本,你還須要安裝 CLI。緩存
npm install --save-dev webpack-cli
複製代碼
對於大多數項目,咱們建議本地安裝。這可使咱們在引入破壞式變動(breaking change)的依賴時,更容易分別升級項目。 注意:因爲咱們將Webpack安裝在了本地,所以沒法直接在命令行內使用「webpack」指令。項目內部只能使用npx webpack的形式.
使用npm init 首先初始化一個項目,首先在命令行內定位到所要放項目的文件夾,而後執行npm init,建立便可。以下圖
在項目內安裝webpack,webpack-cli:
npm install --save-dev webpack webpack-cli
複製代碼
從以前咱們在package.json中添加的腳本命令來看,當項目須要愈來愈多的配置時,就要往命令中添加更多的參數,那麼到後期維護起來就會至關困難。爲了解決這個問題,能夠把這些參數改成對象的形式專門放在一個配置文件裏,在Webpack每次打包的時候讀取該配置文件便可,Webpack的默認配置文件爲webpack.config.js
const path = require('path')
module.exports = {
entry: './src/index.js',
output: {
path: path.join(__dirname, 'dist'),
filename: 'bundle.js'
},
mode: 'development'
}
複製代碼
Webpack對於output.path的要求是使用絕對路徑(從系統根目錄開始的完整路徑),以前咱們在命令行中爲了簡潔因此使用了相對路徑。而在webpack.config.js中,咱們經過調用Node.js的路徑拼裝函數——path.join,將__dirname(Node.js內置全局變量,值爲當前文件所在的絕對路徑)與dist(輸出目錄)鏈接起來,獲得了最終的資源輸出路徑。
package.json 裏面的scripts配置文件添加打包參數, "build": "webpack
{
"name": "webpacktest2",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
// "test": "echo \"Error: no test specified\" && exit 1",
"build": "webpack"
},
"author": "lanfeng",
"license": "ISC",
"devDependencies": {
"webpack": "^4.41.5",
"webpack-cli": "^3.3.10"
}
}
複製代碼
執行npm run build,Webpack就會預先讀取webpack.config.js,而後進行打包。 index.js 文件
import firstDemo from './add-first.js';
document.write(firstDemo);
複製代碼
add-first.js
const test = 'Hello Webpack'
export default test
複製代碼
index.html 文件
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>First</title>
</head>
<body>
<script src="./dist/bundle.js"></script>
</body>
</html>
複製代碼
預留效果如圖: