第一次寫文章,今天踩坑事後但願可以記錄這樣'生動有趣'的踩坑之旅,仍是那樣,在技術的海洋中,我和大佬就像魚和水,我沒了大佬就涼了,大佬沒了我還清淨,感謝一路栽培。公司以前的項目都是用vue-cli2.x的腳手架集成的webpack3,可是最近的項目用到@vue/cli3,也就是vue-cli3,最新的腳手架契合webpack4,目前文檔也更新到了這個版本,一開始看目錄結構,納尼!!webpack常規的配置文件build和config文件怎麼沒了,這尼瑪是否是沒有用到自動化構建!!諸如此類的疑問我相信當你第一眼看到這樣簡潔清爽的目錄結構時也會產生,而後我就去看文檔,這裏cli.vuejs.org/zh/guide/,原來腳手架自動幫咱們把webpack的配置集成到了node_modules中 vue
const req = require.context('./svg', false, /\.svg$/)
複製代碼
require.context會返回一個函數,對應上面的console咱們看一下控制檯node
configWebpack:config =>{
config.module.rules.push(
{
test: /\.svg$/,
loader: 'svg-sprite-loader',
include: [resolve('src/icons')],
options: {
symbolId: 'icon-[name]'
}
}
)
}
複製代碼
結果無功而返,參考了文檔後發現了重設loader的配置方法,那就是經過chainWebpack,經過鏈式操做來修改配置,官方給出的結論 是能夠容許咱們更細粒度的控制其內部配置,提供了一個 webpack 原始配置的上層抽象,使其能夠定義具名的 loader 規則和具名插件,並有機會在後期進入這些規則並對它們的選項進行修改。對於這句話我目前還不是很理解,真是隻在此山中,雲深不知處!若是合併不行,那就替換!webpack
chainWebpack: config => {
const svgRule = config.module.rule('svg');
svgRule.uses.clear();
svgRule
.test( /\.svg$/)
.use('svg-sprite-loader')
.loader('svg-sprite-loader')
.options({
symbolId: 'icon-[name]'
});
}
複製代碼
如此~svg成功經過此loader解析,咱們也獲得了須要的svg圖片模塊,可是既然知道合併不行,替換能夠,若是不但願用鏈式操做的話這裏也列出一種暴力的方法去修改,一樣經過configWebpackes6
configureWebpack: config => {
console.log(config)
let rules=config.module.rules;
for(let i in rules){
console.log(rules[i]);
if(rules[i].use && rules[i].use[0].loader=='file-loader'){
rules.splice(i,1)
}
}
config.module.rules.push(
{
test: /\.svg$/,
loader: 'svg-sprite-loader',
include: [resolve('src/icons')],
options: {
symbolId: 'icon-[name]'
}
}
)
}
複製代碼
如今這樣的話,刪除了file-loader,其實和替換同樣,可是看上去暴力一些,效果確是相同的。至此,大佬和個人加班時間也到了末尾,感受很累,可是感受收穫頗豐,走出公司,風呼嘯着略過個人雙肩揹包,我聳了下眼鏡,走向昏黃的公交車站。感謝!web