如何正确使用System.import()?
How to use System.import() correctly?
我在我的项目中使用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 is not a function
at Object. (/Users/joyfeel/javascript/jspm-test/index.js:49:16)
at Module._compile (module.js:435:26)
at normalLoader (/usr/local/lib/node_modules/babel/node_modules/babel-core/lib/api/register/node.js:199:5)
at Object.require.extensions.(anonymous function) [as .js] (/usr/local/lib/node_modules/babel/node_modules/babel-core/lib/api/register/node.js:216:7)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:311:12)
at Function.Module.runMain (module.js:467:10)
at Object. (/usr/local/lib/node_modules/babel/lib/_babel-node.js:144:25)
at Module._compile (module.js:435:26)
at Object.Module._extensions..js (module.js:442:10)
为什么 lodash
仅在 .then
范围内使用?
谁能告诉我怎么弄出来的?假设我们要System.import
其他模块并使用它?
_
只能在then
范围内访问,因为System.import
总是returns一个Promise。
因此,您必须等待 Promise 被解决,然后才能访问其结果。
无论如何,我不建议您在全球范围内使用 lodash。
但是当你真的想全局使用 _
时,你可以这样做:
System.import('lodash').then(function(_) {
GLOBAL._ = _;
});
你仍然必须确保所有使用 GLOBAL._ 的代码都等到来自 lodash 导入的 Promise 被解决。
但再次强调:我不鼓励你那样做,但建议你在每个需要它的模块中导入 lodash。
我在我的项目中使用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 is not a function at Object. (/Users/joyfeel/javascript/jspm-test/index.js:49:16) at Module._compile (module.js:435:26) at normalLoader (/usr/local/lib/node_modules/babel/node_modules/babel-core/lib/api/register/node.js:199:5) at Object.require.extensions.(anonymous function) [as .js] (/usr/local/lib/node_modules/babel/node_modules/babel-core/lib/api/register/node.js:216:7) at Module.load (module.js:356:32) at Function.Module._load (module.js:311:12) at Function.Module.runMain (module.js:467:10) at Object. (/usr/local/lib/node_modules/babel/lib/_babel-node.js:144:25) at Module._compile (module.js:435:26) at Object.Module._extensions..js (module.js:442:10)
为什么 lodash
仅在 .then
范围内使用?
谁能告诉我怎么弄出来的?假设我们要System.import
其他模块并使用它?
_
只能在then
范围内访问,因为System.import
总是returns一个Promise。
因此,您必须等待 Promise 被解决,然后才能访问其结果。
无论如何,我不建议您在全球范围内使用 lodash。
但是当你真的想全局使用 _
时,你可以这样做:
System.import('lodash').then(function(_) {
GLOBAL._ = _;
});
你仍然必须确保所有使用 GLOBAL._ 的代码都等到来自 lodash 导入的 Promise 被解决。 但再次强调:我不鼓励你那样做,但建议你在每个需要它的模块中导入 lodash。