# webpack4 前端環境建置 part1

需先安裝 node.js, nvm, vscode

用 vscode 打開一個新的資料夾

在終端機打入下面指令

npm init -y
npm i webpack webpack-cli --save-dev

新增一個檔案 webpack.config.js

module.exports = {
  // 進入點
  entry: './index.js',
  output: {
    // 輸出後的名稱
    filename: 'index-bundle.js'
  }
}

修改 package.json script

"scripts": {
  // mode development => 快速給開發者,快
  // mode production => code 壓縮,慢
  // 開發環境
  "start": "webpack --mode development",
  "deploy": "webpack --mode production",

},

在終端機打 npm start

執行後會在資料夾中多一個資料夾 dist/index-bundle.js (此為 webpack 壓縮程式)

新增一個 src 資料夾,把 index.js 丟到此資料夾內

webpack.config.js 新增 path

// 調用 path 方法
var path = require('path');

module.exports = {
  // __dirname 該資料夾的絕對路徑
  // path.resolve() => 將相對路徑或路徑片段解析成絕對路徑
  // index.js 放置的路徑
  context: path.resolve(__dirname, "./src"),
  entry: './index.js',
  output: {
    // output 後的資料夾路徑
    path: path.resolve(__dirname, "./dist"),
    filename: 'index-bundle.js'
  }
}

使用環境變數 NODE_ENV,mac 不需要安裝可以直接讀到值,windows 需安裝且 package.json script 前面需加入 cross-env

npm i cross-env --save-dev

安裝好以後把 package.json script 改寫成下面

"scripts": {
  "start": " NODE_ENV=development webpack --mode development",
  "deploy": "NODE_ENV=production webpack --mode production"
}

到 webpack 拿到環境變數 webpack.config.js 加入下列程式碼

console.log(process.env.NODE_ENV);
npm start

如果電腦是 mac 可以直接 run,若是 windows 需要在 package.json script 前面加入 cross-env

"scripts": {
  "start": "cross-env NODE_ENV=development webpack",
  "deploy": "cross-env NODE_ENV=production webpack"
}

最後在 webpack.config.js 中 mode 改寫成環境變數

module.exports = {
  mode: process.env.NODE_ENV,
  context: path.resolve(__dirname, "./src"),
  entry: './index.js',
  output: {
    path: path.resolve(__dirname, "./dist"),
    filename: 'index-bundle.js'
  }
}

這樣就可以在開發環境或正式環境中使用不同的資料

但作者比較習慣使用以下方式,故先依照作者使用的方法來寫

package.json script

"scripts": {
  "start": " NODE_ENV=development webpack --mode development",
  "deploy": "NODE_ENV=production webpack --mode production"
}

webpack 存擋自動編譯(watch)

把 package.json script 改成

"scripts": {
  "watch": " NODE_ENV=development webpack --mode development --watch",
  "start": " NODE_ENV=development webpack --mode development",
  "deploy": "NODE_ENV=production webpack --mode production"
}

在終端機執行以下程式碼

npm run watch

即可存擋時及時編譯

webpack 加入多個 entry point js 檔案

webpack.config.js

module.exports = {
  context: path.resolve(__dirname, "./src"),
  entry: {
    // entry key 值須跟檔名一樣
    index: './index.js',
    about: './about.js'
  },
  output: {
    path: path.resolve(__dirname, "./dist"),
    // 輸出的檔案
    filename: '[name].js'
  }
}

在執行打包時,在 dist 就會發現有兩個檔案

npm run deploy