"Namespacing" systemJS 中的导入
"Namespacing" an import in systemJS
我想使用一个库 ip-address with SystemJS (note, this question 可能看起来很相似,但这是我 运行 在尝试完成此任务时尝试的另一个问题)。
库 ip-address 依赖于 util-deprecate。它按如下方式导入:
var util = require('util');
然后使用如下:
Address4.prototype.toV6Group =
util.deprecate(Address4.prototype.toGroup6,
'deprecated: `toV6Group` has been renamed to `toGroup6`');
当我在节点项目中将 ip-address 导入为...
var ipAddress = require('ip-address');
...那么我就没有任何问题了。
当我在 SystemJS 项目中导入 ip-address 时...
System.import('ip-address');
...然后我得到一个错误:
util.deprecate is not a function
如何配置 SystemJS 来执行此导入?目前我正在配置它...
const map: any = {
'ip-address':'vendor/ip-address',
'util':'vendor/util-deprecate'
}
const packages: any = {
'ip-address': {main:'ip-address.js'},
'util': {main: 'browser'}
};
只是为了保存查找,util-deprecate 的 browser.js 文件是 here,它直接导出 deprecate 函数。
请注意,如果我修改 ip-address 模块以便所有调用都采用以下形式,我就可以让它工作:
Address4.prototype.toV6Group =
util(Address4.prototype.toGroup6,
'deprecated: `toV6Group` has been renamed to `toGroup6`');
如果可以避免,我宁愿不修改第 3 方库。
好的,原来问题是我认为 ip-address
模块正在使用util-deprecate
。事实证明,ip-address
模块导入 util...
的方式
var util = require('util');
它不是导入 util-deprecate
而是导入 Node 的内置包 util
。因此,为了 ip-address
真正使用 util-deprecate
,必须对 ip-address
模块进行更改。
由于您用 jspm 标记,所以有一个非常简单的解决方案。
使用 jspm
您可以直接从 npm
安装 ip-address 使用:
jspm install npm:ip-address
这将为您完成所有依赖项管理。
我已经在浏览器中对此进行了测试,node.js 使用示例代码 ip-address
提供:
import {Address6} from 'ip-address'
const address = new Address6('2001:0:ce49:7601:e866:efff:62c3:fffe');
console.log(address.isValid()); // true
const teredo = address.inspectTeredo();
console.log(teredo.client4); // '157.60.0.1'
它工作得很好。
我想使用一个库 ip-address with SystemJS (note, this question 可能看起来很相似,但这是我 运行 在尝试完成此任务时尝试的另一个问题)。
库 ip-address 依赖于 util-deprecate。它按如下方式导入:
var util = require('util');
然后使用如下:
Address4.prototype.toV6Group =
util.deprecate(Address4.prototype.toGroup6,
'deprecated: `toV6Group` has been renamed to `toGroup6`');
当我在节点项目中将 ip-address 导入为...
var ipAddress = require('ip-address');
...那么我就没有任何问题了。
当我在 SystemJS 项目中导入 ip-address 时...
System.import('ip-address');
...然后我得到一个错误:
util.deprecate is not a function
如何配置 SystemJS 来执行此导入?目前我正在配置它...
const map: any = {
'ip-address':'vendor/ip-address',
'util':'vendor/util-deprecate'
}
const packages: any = {
'ip-address': {main:'ip-address.js'},
'util': {main: 'browser'}
};
只是为了保存查找,util-deprecate 的 browser.js 文件是 here,它直接导出 deprecate 函数。
请注意,如果我修改 ip-address 模块以便所有调用都采用以下形式,我就可以让它工作:
Address4.prototype.toV6Group =
util(Address4.prototype.toGroup6,
'deprecated: `toV6Group` has been renamed to `toGroup6`');
如果可以避免,我宁愿不修改第 3 方库。
好的,原来问题是我认为 ip-address
模块正在使用util-deprecate
。事实证明,ip-address
模块导入 util...
var util = require('util');
它不是导入 util-deprecate
而是导入 Node 的内置包 util
。因此,为了 ip-address
真正使用 util-deprecate
,必须对 ip-address
模块进行更改。
由于您用 jspm 标记,所以有一个非常简单的解决方案。
使用 jspm
您可以直接从 npm
安装 ip-address 使用:
jspm install npm:ip-address
这将为您完成所有依赖项管理。
我已经在浏览器中对此进行了测试,node.js 使用示例代码 ip-address
提供:
import {Address6} from 'ip-address'
const address = new Address6('2001:0:ce49:7601:e866:efff:62c3:fffe');
console.log(address.isValid()); // true
const teredo = address.inspectTeredo();
console.log(teredo.client4); // '157.60.0.1'
它工作得很好。