講到瀏覽器,腦中浮現的通常是 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"]
}