情況如下
目前要做一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到一個文件中,并且不會重復打包
謝邀~其實可以直接提取壓縮成一個樣式文件。
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中?
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構,是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學校辦產(chǎn)業(yè)為響應國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復興的升級產(chǎn)業(yè)鏈。利用北京大學優(yōu)質教育資源及背
博為峰,中國職業(yè)人才培訓領域的先行者
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務負責iOS教學及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術, 熟練的跨平臺面向對象開發(fā)經(jīng)驗,技術功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術顧問,美國Dachieve 系統(tǒng)架構師,美國AngelEngineers Inc. 系統(tǒng)架構師。