webpack shimming(17)

獲取全套webpack 4.x教程蚕涤,請?jiān)L問瓦力博客

shimming簡單翻譯是墊片峻黍。我們之前寫代碼會遇到向下面情況一樣烂瘫,在一個(gè)文件中引入很多第三方庫

import $ from 'jquery'
import _ from 'loadsh'
import {http} from 'util/http'
import {api} from 'config/api'

.....

反正是引入很多第三方庫或者是自己寫的庫扎即,每個(gè)js文件用到的庫都要引入醒第,讓人很繁瑣花沉,但又不能不引入柳爽。在webpack中ProvidePlugin插件能幫助我們解決上面遇到的問題。

1.安裝

這個(gè)插件是webpack官方自帶的ProvidePlugin 文檔{:target="_blank"} 所以要安裝webpack,安裝過的小伙伴就不要在安裝了碱屁。

yarn add webpack

2.配置

build/plugins.js

const dirpath = require('./base/path');
const config = require('./base/config');

const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');    //生成html文件
const { CleanWebpackPlugin } = require('clean-webpack-plugin');  //清除
const MiniCssExtractPlugin = require("mini-css-extract-plugin");  //css樣式提取


let plugins = [
    new HtmlWebpackPlugin({
        title: '瓦力博客',
        template: dirpath.src + '/index.html'   //以src/index.html為編譯模板
    }),
    new  MiniCssExtractPlugin({
        filename: config.NODE_ENV == 'development'?'[name.css]': `${dirpath.css}/[name].[hash].css`,
        chunkFilename: config.NODE_ENV == 'development'?'[id].css': `${dirpath.css}/[id].[hash].css`
    }),   //css提取
+   new webpack.ProvidePlugin({
+       _:'loadsh'
+   }),
    new CleanWebpackPlugin()
]

if('development' == config.NODE_ENV){
    plugins.push(new webpack.HotModuleReplacementPlugin());
}

module.exports = plugins;

index.js

import { strJoin } from './util/math';

let arr = strJoin(['歡迎','來到','瓦力','博客'])
console.log(arr)

uild/math.js

export const strJoin = arr=>{
    let str = _.join(arr,'++');
    return str;
}

運(yùn)行webpack

yarn run dev
ssl

index.jsmath.js文件中我們沒有引入loadsh庫磷脯,但是代碼還能夠正常運(yùn)行,是因?yàn)槲覀冊?code>plugins.js中配置了loadsh庫娩脾。

ProvidePlugin插件作用是自動(dòng)加載模塊赵誓,而不必到處 import 或 require。只要在ProvidePlugin插件中配置了變量柿赊。凡是在源碼中用到_變量俩功,在webpack打包時(shí),就會文件最前面引入import _ from 'loadsh'就不要我們自己手動(dòng)引入了碰声。

3.引申

其實(shí)ProvidePlugin不僅可以適用第三方庫诡蜓,還可以自定義自己常用的庫。

文件結(jié)構(gòu)

myProject
|-build
   |-base
       |-path.js
       |-config.js
   |-mode.js
   |-entry.js
   |-devtool.js
   |-module.js
   |-plugins.js
   |-devServer.js
   |-optimization.js
   |-output.js
 |-dist
 |-node_modules
 |-src
+    |-api
+        |-apiPath.js
     |-util
        |-math.js
     |-assets
        |-css
            |-index.css
        |-less
            |-index.less     
        |-sass
            |-index.scss
        |-images
            |-wali_logo.png
     |-index.html
     |-index.js
 |-package.json
 |-webpack.config.js
 |-postcss.config.js
 |-.babelrc

api/apiPath.js

在apiPath.js中定義所有接口

const host = 'http://www.walibo.com'

export const url = {
    login: `${host}/login`,         //登錄
    signout: `${host}/signout`      //退出登錄
}

index.js

console.log(url)

build/plugins.js

const dirpath = require('./base/path');
const config = require('./base/config');

const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');    //生成html文件
const { CleanWebpackPlugin } = require('clean-webpack-plugin');  //清除
const MiniCssExtractPlugin = require("mini-css-extract-plugin");  //css樣式提取


let plugins = [
    new HtmlWebpackPlugin({
        title: '瓦力博客',
        template: dirpath.src + '/index.html'   //以src/index.html為編譯模板
    }),
    new  MiniCssExtractPlugin({
        filename: config.NODE_ENV == 'development'?'[name.css]': `${dirpath.css}/[name].[hash].css`,
        chunkFilename: config.NODE_ENV == 'development'?'[id].css': `${dirpath.css}/[id].[hash].css`
    }),   //css提取
    new webpack.ProvidePlugin({
        _:'loadsh',
+       url:['../src/api/apipath','url']    
    }),
    new CleanWebpackPlugin()
]

if('development' == config.NODE_ENV){
    plugins.push(new webpack.HotModuleReplacementPlugin());
}

module.exports = plugins;

運(yùn)行webpack

yarn run dev
ssl

只要在plugins.js插件中配置胰挑,那么在所有源碼中都不需要單獨(dú)引入了蔓罚。ProvidePlugin不僅可以配置第三方庫椿肩,還可以配置自己的庫文件。配置自己的庫文件一定要將路徑寫對豺谈,不然會報(bào)錯(cuò)的郑象。小菜這節(jié)就做到這里,小伙伴們盡情的發(fā)揮想象吧茬末!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末厂榛,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子团南,更是在濱河造成了極大的恐慌噪沙,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吐根,死亡現(xiàn)場離奇詭異正歼,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)拷橘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門局义,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人冗疮,你說我怎么就攤上這事萄唇。” “怎么了术幔?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵另萤,是天一觀的道長。 經(jīng)常有香客問我诅挑,道長四敞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任拔妥,我火速辦了婚禮忿危,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘没龙。我一直安慰自己铺厨,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布硬纤。 她就那樣靜靜地躺著解滓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪筝家。 梳的紋絲不亂的頭發(fā)上伐蒂,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機(jī)與錄音肛鹏,去河邊找鬼逸邦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛在扰,可吹牛的內(nèi)容都是我干的缕减。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼芒珠,長吁一口氣:“原來是場噩夢啊……” “哼桥狡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起皱卓,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤裹芝,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后娜汁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嫂易,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年掐禁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了怜械。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡傅事,死狀恐怖缕允,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蹭越,我是刑警寧澤障本,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站响鹃,受9級特大地震影響驾霜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜茴迁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一寄悯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧堕义,春花似錦猜旬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至怕膛,卻和暖如春熟嫩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背褐捻。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工掸茅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留椅邓,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓昧狮,卻偏偏與公主長得像景馁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子逗鸣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 全局安裝webpack 全局安裝webpack會有個(gè)問題合住,就是當(dāng)你有兩個(gè)項(xiàng)目依賴于不同版本的webpack,就會有...
    説好的妹紙呢閱讀 1,816評論 0 11
  • 目錄第1章 webpack簡介 11.1 webpack是什么撒璧? 11.2 官網(wǎng)地址 21.3 為什么使用 web...
    lemonzoey閱讀 1,735評論 0 1
  • webpack 介紹 webpack 是什么 為什么引入新的打包工具 webpack 核心思想 webpack 安...
    yxsGert閱讀 6,464評論 2 71
  • 在現(xiàn)在的前端開發(fā)中透葛,前后端分離、模塊化開發(fā)卿樱、版本控制僚害、文件合并與壓縮、mock數(shù)據(jù)等等一些原本后端的思想開始...
    Charlot閱讀 5,439評論 1 32
  • 創(chuàng)建配置文件webpack.config.js 在根目錄在手動(dòng)創(chuàng)建webpack.config.js殿如,配置基本模板...
    world_7735閱讀 860評論 0 3