在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 多頁webpack項目使用 MiniCssExtractPlugin 提取打包,

多頁webpack項目使用 MiniCssExtractPlugin 提取打包,css文件重復打包的問題

情況如下
目前要做一pc網(wǎng)站,于是先擼個簡單的腳手架出來
老衲也是首次接觸webpack下的開發(fā),擼這東西踩了很多坑了,現(xiàn)在死在這
(各位施主可能會問,干嘛不直接html+script開擼?因為老衲要裝逼下用用前端工程化)

使用 webpack4.6.0 + html-webpack-plugin3.2.0 (注:不是用vue),其它東西若干。。

有2頁面,index.html,main.html, 分別加載各自的js,配置如下

const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require("mini-css-extract-plugin") 

//配置項
module.exports = {
    entry : {
        'index' : __dirname + '/src/index.js',
        'main' : __dirname + '/src/main.js',
        'jqueryv183min' :__dirname + '/src/jqueryv183min.js'
    },
    output:{
        path: __dirname + '/dist',
        filename:'js/[name].js',
        publicPath:'/',
    },
    devServer:{...},
    module:{
        rules:[
            {
                test: /.js$/,
                loader: 'babel-loader?presets=es2015',
            },
            {
                test: /\.(htm|html)$/i,
                loader: 'html-withimg-loader'
            },
            {
                test:/\.(jpg|png|gif|svg)$/,
                //小于1024的圖片都用base64的方式加載
                loader: 'url-loader',
                options: {
                    limit: 1024,
                      outputPath:'images/'
                }
            },
            {
                test: /\.css$/,
                loader:[MiniCssExtractPlugin.loader,'css-loader']
            }
        ]
    },
    plugins:[
    new HtmlWebpackPlugin({
        template: __dirname + "/src/index.html",
        filename:'index.html',
        chunks:['jqueryv183min','index'],
        chunksSortMode: 'manual'
    }),
    new HtmlWebpackPlugin({
        template: __dirname + "/src/main.html",
        filename:'main.html',
        chunks:['main'],
        chunksSortMode: 'manual'
    }),
    new MiniCssExtractPlugin({
        filename: "css/[name].css",
        chunkFilename: "[id].css"
    })
    ]
}

在index.js和main.js中,都有引用了2個css
base.css當然是基礎rest css,
為了省事,目前所有頁面中效果css,都統(tǒng)一放在main.css,所以每個頁面都要引用(或者正式開發(fā)時會分開)

import idxcss from './css/base.css'
import maincss from './css/main.css'

build之后,html和js打包正常,css目錄下,出現(xiàn)2個css文件 :index.css,main.css,

當然是MiniCssExtractPlugin從js中抽取出來的

打包后的的index.html中引入了index.css, 一樣的 main.html中引入了main.css

打開一看, 2個文件的內容一模一樣,都包含了base.css和main.css中的內容

問題很明顯,base.css重復打包了,所以老衲期望效果是:
base.css和main.css分別打包生成單獨的文件,在2個html中當然就是2個link標簽引入這2個css文件

或者如果說和打包后js一樣,可以需要的塊打包并自動引入
讓每個html頁面自動引入獨立的css文件,同時引入公用bsse.css文件 而不像上面一樣base.css都重復打包在里面

百度了一番,無果
老衲先從MiniCssExtractPlugin這個插件的配置入手,無奈,實在找不到有用信息
難道沒有人遇到過此問題? 問題可能比較特殊?
是否可能老衲習慣以前的直接開擼開發(fā)方式,所以結構配置上有問題?

回答
編輯回答
不二心

現(xiàn)在已算解決問題,為幫助后人,特此寫下方案(只會針對老衲的腳手架結構)
如老衲的結構是這樣的
index.js:
import idxcss from './css/base.css'
import maincss from './css/index.css'
main.js:
import idxcss from './css/base.css'
import maincss from './css/index.css'

2個入口文件都重復了2個css

話說看到文章說webpack4無法使用extract-text-webpack-plugin,老衲一開始才使用MiniCssExtractPlugin
但是MiniCssExtractPlugin無法抽取所有js中的css打包到一個css中,控制臺會提示重復輸出

于是在別的地方又看到說其實webpack4 可以用 extract-text-webpack-plugin
安裝的時候加個@next
如 cnpm i extract-text-webpack-plugin@next --save-dev

具體使用方法自己百度,樓上施主貼出的地址里面也有
這個插件可以打包所有css到一個文件中,并且不會重復打包

2018年4月1日 16:40
編輯回答
糖豆豆

謝邀~其實可以直接提取壓縮成一個樣式文件。

new MiniCssExtractPlugin({
    filename: "css/style.css",
    chunkFilename: "[id].css"
})

base.css重復打包了。是因為你寫的entry入口index,main,和引用的樣式都是一樣的。肯定是兩份一樣的樣式。
你需要的是提取公共css,壓縮css``。
purify-css, optimize-css-assets-webpack-plugin等插件。
可參考下以下文章。
上手webpack4并進階?來看這里~
在webpack+vue中,如何將css相同的部分提取到一個公共的common.css中?

2018年5月13日 14:51