【问题标题】:Meteor 1.3 and RequireJSMeteor 1.3 和 RequireJS
【发布时间】:2016-07-16 17:09:36
【问题描述】:

我的 Meteor 1.2.1 应用程序运行良好的 RequireJS 2.1.8。具体来说,在我的 Iron Router 路由中:

waitOn: function() {
    return IRLibLoader.load(requireUrl, {
        success: function() {
             require.config({
                baseUrl: 'http://...' // real URL here
             });
        }
    });
}

我升级到 Meteor 1.3,但现在出现以下错误:“require.config is not a function”。

进一步看,我可以看到 modules-runtime 包定义了自己的 require 变量。

我在 require.config 调用之前尝试了“require = requirejs”,这使我的 require.config 行运行良好,但随后 Meteor 挂起并出现以下错误:

Exception from Tracker afterFlush function:
meteor.js?hash=ec96c6f…:913 TypeError: id.charAt is not a function
    at fileResolve (modules-runtime.js?hash=939c79d…:288)
    at require (modules-runtime.js?hash=939c79d…:90)
    at .<anonymous> (index.js:6)
    at blaze.js?hash=38069f4…:3331
    at Function.Template._withTemplateInstanceFunc (blaze.js?hash=38069f4…:3677)
    at fireCallbacks (blaze.js?hash=38069f4…:3327)
    at .<anonymous> (blaze.js?hash=38069f4…:3420)
    at blaze.js?hash=38069f4…:1773
    at Object.Blaze._withCurrentView (blaze.js?hash=38069f4…:2204)
    at blaze.js?hash=38069f4…:1772

似乎 Meteor 不希望在其一侧进行“要求”重新定义。

如何让 Meteor 1.3 和 RequireJS 共存。

【问题讨论】:

    标签: javascript meteor requirejs


    【解决方案1】:

    事实证明,在 waitOn 函数中,Meteor 1.3 module.js 重新定义了“require”变量。作为局部变量,这是一个很好的做法,但它与 RequireJS 将 require 定义为全局变量相冲突,因此我使用 require 全局变量的代码会失败。

    分两步解决: 1. 使用 requirejs.config 而不是 require.config 2. 重写了我在其中使用 require 的定义,因为它依赖于 require:

    define([
        'require',
        ...
    ],
    function (
        require,
        ...
    ) {
        require(...); // code that works :-)
    });
    

    【讨论】:

      猜你喜欢
      • 2016-07-17
      • 2016-10-26
      • 2016-06-12
      • 2016-08-14
      • 1970-01-01
      • 2016-07-16
      • 1970-01-01
      • 2016-11-05
      • 2016-07-19
      相关资源
      最近更新 更多