webpack學(xué)習(xí)第十六步—— 墊片Shimming

shimming

低版本瀏覽器不支持promise,使用polyfill去實(shí)現(xiàn)promise就是一個(gè)墊片

jquery

  • 新建jquery.ui.js
export function ui() {
    $('body').css('background','red')
}
  • 修改index.js,在其中使用jquery.ui.js
import _ from 'lodash'
import $ from 'jquery'
import { ui } from './jquery.ui'

ui()
const dom = $('<div>')
dom.html(_.join(['a','b','c'],'--!-'))

$('body').append(dom)
  • 此時(shí)運(yùn)行會(huì)報(bào)錯(cuò),因?yàn)閖query.ui.js中并沒(méi)有引入jquery,webpack基于模塊打包,jquery.ui.js是無(wú)法找到$的(變量隔離)所以無(wú)法識(shí)別$
  • 使用webpack的插件
plugins: [
    new HtmlWebpackPlugin({
        template: 'src/index.html'
    }),
    new CleanWebpackPlugin({
        root: path.resolve(__dirname, '../')
    }),
    new webpack.ProvidePlugin({
        // 模塊中使用了$就自動(dòng)引入jquery,并將jquery賦值給$
        $: 'jquery'
    })
]
  • 此時(shí)index.jsjquery.ui.js都不需要import $ from 'jquery',但是能成功運(yùn)行,這種方式就叫墊片Shimming

  • lodash也使用墊片,這樣使用lodash的地方也不需要import _ from 'lodash'

plugins: [
    new HtmlWebpackPlugin({
        template: 'src/index.html'
    }),
    new CleanWebpackPlugin({
        root: path.resolve(__dirname, '../')
    }),
    new webpack.ProvidePlugin({
        $: 'jquery',
        _: 'lodash'
    })
]
  • 也可以為方法使用墊片
plugins: [
    new HtmlWebpackPlugin({
        template: 'src/index.html'
    }),
    new CleanWebpackPlugin({
        root: path.resolve(__dirname, '../')
    }),
    new webpack.ProvidePlugin({
        $: 'jquery',
        _join: ['lodash','join']
    })
]
// 此時(shí)jquery.ui.js可改寫為
export function ui() {
    $('body').css('background',_join(['green'],''))
}

修改this指向的墊片

  • this是指向模塊而非window的
console.log(this)
console.log(this === window)
  • 使用imports-loader改變this指向
npm install imports-loader --save
module: {
    rules: [{
        test: /\.(jpg|png|gif)$/,
        use: {
            loader: "url-loader",
            options: {
                name: '[name]_[hash].[ext]',
                outputPath: 'images/',
                limit: 2048
            }
        }
    },{
        test: /\.js$/,
        exclude: /node_modules/,
        use: [{
            loader: "babel-loader"
        },{
            // 使this指向window
            loader: "imports-loader?this=>window"
        }],
    }]
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 全局安裝webpack 全局安裝webpack會(huì)有個(gè)問(wèn)題,就是當(dāng)你有兩個(gè)項(xiàng)目依賴于不同版本的webpack,就會(huì)有...
    説好的妹紙呢閱讀 1,963評(píng)論 0 11
  • 在webpack打包的過(guò)程中,我們往往要做一些代碼上的兼容或者打包過(guò)程的兼容; 舉例來(lái)說(shuō),之前我們要使用babel...
    泡杯感冒靈閱讀 625評(píng)論 0 0
  • 打包命令 為了development模式下也能很好觀察打包的文件,我們?cè)趐ackage.json中增加一個(gè)打包命令...
    Love小六六閱讀 1,103評(píng)論 0 0
  • webpack的打包和性能優(yōu)化 tree shaking tree shaking 是一個(gè)術(shù)語(yǔ),通常用于描述移除 ...
    mongofeng閱讀 1,850評(píng)論 0 0
  • 愛(ài)生活,愛(ài)瑜伽 一套簡(jiǎn)單的裝備,一個(gè)強(qiáng)烈的愿望,換來(lái)一個(gè)健康充實(shí)的人生 看著這些誘人的身軀,你是否不止一次幻想過(guò)自...
    bc7141cfd75a閱讀 534評(píng)論 0 0

友情鏈接更多精彩內(nèi)容