講到瀏覽器,腦中浮現的通常是 Google Chrome、IE(Edge)、FireFox、Safari...等較常見的瀏覽器,光是這些台灣的主流瀏覽器對『前端 3 寶』的支援度就有些差異,更不用說其他較不常見的瀏覽器,今天就來學習如何讓 Webpack 具備支援多瀏覽器的神力。
在開發前,可以先確定要支援的瀏覽器種類,並且使用 BrowsersList 這個插件來定義在專案內。
方法 1 - 編輯 package.json 加入設定(以下設定內容僅供參考)
"browserslist": [
  "defaults"
] 
方法 2 - 新增.browserslistrc檔案,獨立出一個設定檔
defaults
撰寫方式可以參考BrowsersList的文件。
完成設置後,可以透過指令查看支援了哪些瀏覽器和版本。
$ npx browserslist
有些瀏覽器的 CSS 屬性需要加上前綴詞才能生效(特別是 CSS 3 以後的屬性,例如:-webkit、-moz...,要人工加上這些前綴費時費力,PostCSS 像 Webpack 一樣是多功能的套件,但是專精在 css 後處理,可以把新的語法轉成舊的寫法,也能自動加上前綴來支援各種瀏覽器。
$ npm i -D postcss-loader postcss
編輯 webpack.config.js,修改 css 的 loader 配置:
module.exports = {
  module: {
    rules: [
      {
        test: /\.css$/i,
        use: [
          {
            loader: 'css-loader',
            options: {
              importLoaders: 1,
            }
          },
          {
            loader: "postcss-loader",
          },
        ],
      },
    ],
  },
};
新增檔案 postcss.config.js,並且寫入要使用的功能,這邊先加入自動補上前綴的功能。
plugins: [
  require('autoprefixer')
]
安裝 autoprefixer
$ npm i -D autoprefixer
完成安裝後就可以測試是否成功了。
PostCSS 提供 CSS 的加工處理,Bable 則是專職 JavaScript 的處理,可以把一些較新的語法轉成舊的寫法來支援無法解析的瀏覽器(例如:ES6 的箭頭函式轉成 ES5 的寫法)。
安裝 Babel Loader和相關套件。
npm i -D babel-loader @babel/core @babel/preset-env
編輯 webpack.config.js,在 module裡面新增一個 rules物件。
module: {
  rules: [
    {
      test: /\.m?js$/,
      exclude: /node_modules/,
      use: {
        loader: 'babel-loader',
      }
    }
  ]
}
設定 babel
loader: 'babel-loader',
options: {
  presets: [
    ['@babel/preset-env']
  ]
}
babel.config.json 來獨立撰寫設定。
{
  "presets": ["@babel/preset-env"]
}