91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

require.context如何使用

發布時間:2020-10-10 17:48:04 來源:億速云 閱讀:152 作者:小新 欄目:web開發

小編給大家分享一下require.context如何使用,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

場景需要我們引入某個指定文件夾下的所有webp格式的圖片,在單擊demo1的時候展示demo1下的x張案例圖,在單擊demoX的時候展示demoX下的x張案例圖。

    // 通過require.context的方式引入指定的路徑下匹配到的模塊引用
    const demoImgsContext = require.context('@src/assets/imgs/demo', false, /\.webp$/);
    ...
    // 使用姿勢
    trigger(type) {
        this.demoImgs = Arry.from({length: config.type}, (key, value) => value + 1)
            .map(index => demoImgsContext(`./${type}_demo${index}.webp`));
    }

舉一反三的場景還有需要的么?
比如vuex引入多個module的store。也可以使用這個方法。

    // 添加module文件是,文件命請按照module_XXX的方式命名
    // 自動引入module文件夾下的js文件
    const mutationContext = require.context('./module', false, /.*\.js/);
    const modules = mutationContext.keys().reduce((prev, cur) => {
        // 排除module_root文件
        const matches = cur.match(/module_(?!.*root)(\w+)\.js/);
        const key = matches && matches[1];
        key && (prev[key] = mutationContext(cur).default);
        return prev;
    }, {});

接下來,讓我們看一下,require.context是如何做到動態引入資源的呢?

看下打包后的dist目錄下,我們的靜態圖片案例chunk這個部分的代碼是啥樣的。

trigger方法中引用模塊資源的代碼如下,對y方法進行調用,傳入了一個資源的路徑。

    map(function (e) {
        return y("./".concat(t, "_demo").concat(e, ".webp"))
    })

那y方法是什么呢?順藤摸瓜,繼續看下打包后的代碼。

   y = a("ae36");

y方法是某個模塊的export,繼續查看這個id下的模塊代碼:

ae36: function (t, e, a) {
      // 此處是一個map映射,key值和真正的資源id的映射
      var i = {
        "./a_module_demo1.webp": "6085",
        "./a_module_demo2.webp": "fd3b",
        "./b_module_demo1.webp": "cbf6",
        "./b_module_demo2.webp": "220e",
        "./c_module_demo1.webp": "273e",
        "./c_module_demo2.webp": "5a5e",
        "./d_module_demo1.webp": "75b0",
        "./d_module_demo2.webp": "2d3e"
      };
      // 此處根據module的id值,真正require一個資源
      function r(t) {
        var e = o(t);
        return a(e)
      }
      
      function o(t) {
        var e = i[t];
        if (!(e + 1)) {
          var a = new Error("Cannot find module '" + t + "'");
          throw a.code = "MODULE_NOT_FOUND", a
        }
        return e
      }
      r.keys = function () {
        return Object.keys(i)
      }, r.resolve = o, t.exports = r, r.id = "ae36"
    },

"6085","fd3b"等map映射的value值可想而知,是真正的資源id值,其對應的模塊映射如下:

6085: function (t, e) {
      t.exports =
        "//${你配置的項目publicPath}/img/1_module_demo1.ed6db768.webp"
    },

當用戶觸發trigger方法時,根據type和index指定的值,require.context存儲的模塊資源引用會根據key值找到真正的資源模塊,進行require,瀏覽器會幫助我們下載相應的資源,做到了批量引入后按需加載的想法。

看完了這篇文章,相信你對require.context如何使用有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

波密县| 洪泽县| 闸北区| 萨嘎县| 专栏| 明光市| 泰宁县| 长岛县| 肥西县| 万全县| 弥勒县| 会昌县| 禄劝| 贺州市| 时尚| 五原县| 三亚市| 荔浦县| 桃园市| 汝阳县| 罗田县| 资兴市| 榕江县| 华池县| 聂拉木县| 博乐市| 融水| 楚雄市| 清丰县| 濮阳县| 榆树市| 九龙城区| 遂宁市| 新化县| 芜湖市| 宁晋县| 碌曲县| 邵阳市| 荃湾区| 临桂县| 沿河|