MiniCssExtractPlugin
MiniCssExtractPlugin 是用來將每個由 webpack 產生內含有 css 的 js 檔案轉成 css 檔。
以下為 SASS 轉 CSS 檔範例。
一、新增一個名為 webpack-demo 資料夾
二、專案初始化
$ npm init -y
在 webpack-demo 資料夾新增 src、dist 資料夾
src 資料夾放入 myStyle.scss 檔,內容如下
$color: blue; span { color: $color; }
dist 資料夾放入 index.html 檔,內容如下
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <link rel="stylesheet" href="./myStyle.css"> </link> </head> <body> <p>ppp</p> <span>span</span> </body> </html>
在 webpack-demo 資料夾底下新增 webpack.config.js 檔,內容如下
const path = require('path'); const MiniCssExtractPlugin = require("mini-css-extract-plugin"); module.exports = { entry: { 'myStyle': './src/myStyle.scss' }, // output: { // filename: 'main.js', // path: path.resolve(__dirname, 'dist') // }, plugins: [ new MiniCssExtractPlugin({ // Options similar to the same options in webpackOptions.output // both options are optional filename: '[name].css', chunkFilename: '[id].css', }), ], module: { rules: [ { test: /\.scss$/, use: [ { loader: MiniCssExtractPlugin.loader }, { loader: 'css-loader', options: { // sourceMap: true } }, { loader: 'sass-loader', options: { // sourceMap: true } } ] }, ], }, };
說明:
1、MiniCssExtractPlugin 的 filename、chunkFilename 屬性是非必要的,
當沒有指定時,css 檔名的產生, 預設是根據 entry 底下各個的 key 產生相對應的檔名;
當 MiniCssExtractPlugin 指定 filename、chunkFilename 屬性值時,
plugins: [ new MiniCssExtractPlugin({ // Options similar to the same options in webpackOptions.output // both options are optional filename: '[name].css', chunkFilename: '[id].css', }), ],
css 檔名的產生就會按照該 filename、chunkFilename 屬性值的規則走。
2、entry 的入口不一定就只能轉譯 *.js,也可處理 *.scss 等檔案。
以上前置作業準備完成後,接下來安裝相關套件
$ npm install webpack webpack-cli --save-dev
$ npm install css-loader --save-dev
$ npm install sass-loader node-sass --save-dev
$ npm install --save-dev mini-css-extract-plugin
裝完後執行
$ npx webpack
之後會在 dist 資料夾產生 mystyle.css、myStyle.js 兩的檔案
myStyle.js 沒有作用,我們只要引用 mystyle.css 到 index.html 裡就好。
執行結果
參考資料: