【问题标题】:How to use System.import() correctly?如何正确使用 System.import()?
【发布时间】:2015-11-11 08:40:31
【问题描述】:

我在我的项目中使用jspm

但是我需要服务器端的 nodejs 文件来执行一些指令。

例如,我需要使用lodash,并在https://github.com/systemjs/systemjs中找到了指南

var System = require('jspm').Loader();
System.import('lodash').then(function (_) {  console.log(_); });

但是,我想在全球范围内使用 lodash。 就像

var _ = System.import('lodash');
var myArr = _.map([1, 2, 3], function(n) { return n * 3; });

它会显示

TypeError: _.map 不是函数 在对象。 (/Users/joyfeel/javascript/jspm-test/index.js:49:16) 在 Module._compile (module.js:435:26) 在 normalLoader (/usr/local/lib/node_modules/babel/node_modules/babel-core/lib/api/register/node.js:199:5) 在 Object.require.extensions.(匿名函数) [as .js] (/usr/local/lib/node_modules/babel/node_modules/babel-core/lib/api/register/node.js:216:7) 在 Module.load (module.js:356:32) 在 Function.Module._load (module.js:311:12) 在 Function.Module.runMain (module.js:467:10) 在对象。 (/usr/local/lib/node_modules/babel/lib/_babel-node.js:144:25) 在 Module._compile (module.js:435:26) 在 Object.Module._extensions..js (module.js:442:10)

为什么lodash 只能在.then 范围内使用?

谁能告诉我怎么解决?假设我们要System.import其他模块并使用它?

【问题讨论】:

    标签: node.js jspm systemjs


    【解决方案1】:

    _ 只能在then 的范围内访问,因为System.import 总是返回一个Promise。 因此,您必须等待 Promise 解决,然后才能访问其结果。 无论如何,我不建议您在全球范围内使用 lodash。

    但是当你真的想在全局范围内使用 _ 时,你可以这样做:

    System.import('lodash').then(function(_) {
        GLOBAL._ = _;
    });
    

    您仍然必须确保所有使用 GLOBAL._ 的代码都等到来自 lodash 导入的 Promise 得到解决。 但同样:我不鼓励你这样做,但建议你在每个需要它的模块中导入 lodash。

    【讨论】:

    • 感谢您的建议! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 2020-12-04
    • 2012-07-12
    • 2013-01-21
    • 2021-10-24
    • 2011-12-22
    相关资源
    最近更新 更多