# webpack4 前端環境建置 part4

使用 webpack 來建立 server

npm i -D webpack-dev-server

在 webpack.config.js 加入 devServer 設定,在 output 的下面加入 devServer 設定,此設定為作者的設定,若需要其他設定頁可以到官方網站去詳細設定

module.exports = {
  output: {
    ...
  },
  devServer: {
    compress: true,
    port: 300,
    stats: {
      asserts: true,
      cached: false,
      chunkModules: false,
      chunkOrigins: false,
      chunks: false,
      colors: true,
      hash: false,
      modules: false,
      reasons: false,
      source: false,
      version: false,
      warnings: false
    }
  }
}

到 package.json 的 script 加入 dev 指令

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

在 run dev 時會報錯,因爲讀取由前面讀取到後面,當 --mode development 因為還沒讀到 webpack.config.js 檔案,所以報錯

--mode: command not found

稍微移動一下 --mode development 位置

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

又報錯 =) 作者 webpack-dev-server 版本為 3.1.10,目前安裝的版本為 4.11.1 所以已能靠自己來 debug 了,看起來像是 config 的設定寫錯

[webpack-cli] Invalid options object. Dev Server has been initialized using an options object that does not match the API schema.
 - options has an unknown property 'stats'. These properties are valid:

決定先將 stats 註解掉,hot 打開 (編譯時重新打包)

module.exports = {
  output: {
    ...
  },
  devServer: {
    compress: true,
    port: 300,
    hot: true,
    // stats: {
    //   asserts: true,
    //   cached: false,
    //   chunkModules: false,
    //   chunkOrigins: false,
    //   chunks: false,
    //   colors: true,
    //   hash: false,
    //   modules: false,
    //   reasons: false,
    //   source: false,
    //   version: false,
    //   warnings: false
    // }
  }
}

可以 run 了那就先這樣,有空再來研究一下

應該是 webpack 3 跟 webpack 4 的寫法不同,目前這個無法 hot reloading,後續再看看要怎麼解,先往下走

TODO: webpack4 reloading
npm run dev

可以成功 run 起來 server 但沒 hot reloading

webpack devServer 並不會編譯產生 dist 資料夾,他是把 src 資料夾裡面的內容做預處理存到記憶體內,再從記憶體拉出來,

在 package.json script dev 那邊後面加 --open 時就可以在 run devServer 時可以自動打開 server 瀏覽器

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