簡體   English   中英

require.js需要一個帶index.js的模塊

[英]require.js require a module with index.js

所以我正在嘗試設置Typescript和Chutzpah用於測試目的。 Typescript設置為以這種格式輸出:

define(['require', 'exports', './someModule'], function(require, exports, someModule) {
    //examplecode
});

哪個工作正常,當someModule實際上是一個index.js目錄時,會出現問題。

/app
  app.js
  /someModule
    index.js

require.js無法以這種方式解析someModule並且測試失敗。

有沒有辦法告訴require.js這是一個模塊?

RequireJS不會自動檢查是否存在index.js並將其作為模塊加載。 你需要告訴RequireJS,當你想加載someModule ,它應該加載someModule/index 我在調用require.config設置了一個map

require.config({
  [ ... ]
  map: {
    '*': {
        someModule: 'someModule/index',
    }
  },
});

您必須調整您在那里提供的名稱,以便它是相對於您的baseUrl的路徑。 從你在問題中提供的信息來看,這一點並不清楚。

(為了記錄,還有一個packages設置,您可以調整以執行您想要的操作但放置一些packages說“這是一個軟件包”,這不是您在此處所看到的。所以我不會將它用於什么你正試圖這樣做。)

我也不喜歡map的配置。 我完成此操作的最簡單方法是編寫一個require的插件。

讓我們命名插件mod ,它是用來作為mod!module/someModule ,你也可以把它稱為index作為index!module/someModule ,不管你最適合。

define(function(require, exports, module) {
   // loading module/someModule/index.js with `mod!`      
   var someModule = require('mod!module/someModule');

   // whatever this is about ..
   module.exports = { .. };
});

因此,假設您在require的配置中設置了某種項目結構的paths

- app
  - modules
    - someModule/index.js        // the index we want to load
    - someModule/..
    - someModule/..
    - etc
  - plugins
    - mod.js                     // plugin to load a module with index.js

需要配置:

require.config({
   paths: {
      'module': 'app/modules',

      // the plugin we're going to use so 
      // require knows what mod! stands for
      'mod': 'app/plugins/mod.js'
   }
});

要閱讀有關如何編寫插件的所有方面,請閱讀requirejs.org上的文檔 最簡單的版本是重寫您嘗試訪問的請求“模塊”的name ,並將其傳遞回load

應用程序/插件/ mod.js

(function() {
    define(function () {
        function parse(name, req) {
            return req.toUrl(name + '/index.js');
        }

        return {
            normalize: function(name, normalize) {
                return normalize(name);
            },
            load:function (name, req, load) {
                req([parse(name, req)], function(o) {
                    load(o);
                });
            }
        };
    });
})();

這不是生產代碼 ,它只是一種簡單的方式來證明需要配置並不意味着解決這樣的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM