1. webpack中l(wèi)ibrary和libraryTarget詳解

        共 1862字,需瀏覽 4分鐘

         ·

        2021-01-18 19:45


        默認(rèn) webpack 導(dǎo)出都是這樣的結(jié)構(gòu),一個自執(zhí)行函數(shù)的形式。

        (() => {  return {    name: 'jack',    age: 24,  };})();


        沒有賦值操作,所以其他文件沒法引用該對象。加了 library 和 libraryTarget 之后的 webpack 配置:

        output: {  ...  library: 'finalModule',  libraryTarget: 'var',},
        var finalModule = (() => {  return {    name: 'jack',    age: 24,  };})();


        特點(diǎn):有賦值操作,賦值給 library 定義的變量。所以 libraryTarget: 'var' 的含義就是作為全局變量,具體變量的名字叫什么是通過 library 來定義的。


        libraryTarget: 'assign' 的 webpack 配置:

        output: {  ...  library: 'finalModule',  libraryTarget: 'assign',},
        finalModule = (() => {  return {    name: 'jack',    age: 24,  };})();


        特點(diǎn):賦值給全局變量, 可能會覆蓋宿主環(huán)境下同名的變量名,因?yàn)槲覀兛吹阶兞渴侵苯邮褂玫?,并沒有通過 var 去聲明,和第一種還是有區(qū)別。


        libraryTarget: 'this' 的 webpack 配置:

        output: {  ...  library: 'finalModule',  libraryTarget: 'this',},
        this.finalModule = (() => {  return {    name: 'jack',    age: 24,  };})();


        通過對象屬性暴露,這里是 this 對象,屬性是通過 library 來定義的。


        當(dāng)然我們也可以掛在到 window 對象上。

        output: {  ...  library: 'finalModule',  libraryTarget: 'window',},
        window.finalModule = (() => {  return {    name: 'jack',    age: 24,  };})();


        當(dāng)然我們也可以掛在到 global 對象上。

        output: {  ...  library: 'finalModule',  libraryTarget: 'global',},
        global.finalModule = (() => {  return {    name: 'jack',    age: 24,  };})();


        我們還可以定義在導(dǎo)出的對象上,方便其他庫導(dǎo)入進(jìn)來使用。

        output: {  ...  library: 'finalModule',  libraryTarget: 'commonjs',},
        exports.finalModule = (() => {  return {    name: 'jack',    age: 24,  };})();


        還有默認(rèn)導(dǎo)出,使用 libraryTarget 為 commonjs2 這個屬性。此時 library 配置的字段會失效。所以我們可以省略。

        output: {  ...  libraryTarget: 'commonjs',},
         module.exports = (() => {  return {    name: 'jack',    age: 24  }})());


        這是 commonJS 規(guī)范,還有 amd 規(guī)范的形式。

        output: {  ...  library: 'finalModule',  libraryTarget: 'amd',},
        define('finalModule', [], () => {  return (() => {    return {      name: 'jack',      age: 24,    };  })();});

        太多了!??!

        瀏覽 66
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
          
          

            1. 操屄自拍 | 99在线观看视频 | 肉大捧一进一出免费观看在线 | 大鸡吧伊人网 | 99热123|