如何正确使用System.import()?

时间:2015-11-11 08:40:31

标签: node.js jspm systemjs

我在项目中使用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)       at 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其他模块并使用它?

1 个答案:

答案 0 :(得分:2)

_只能在then范围内访问,因为System.import始终会返回Promise。 因此,您必须等待Promise得到解决才能访问其结果。 无论如何,我不建议你全球使用lodash。

但是如果你真的想在全球范围内使用_,你可以这样做:

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

仍然需要确保使用GLOBAL._的所有代码都等待,直到lodash导入的Promise得到解决。 但是又一次:我会劝阻你这样做,但建议你在每个需要它的模块中导入lodash。