WARNING: No name was provided for external module 'moment' in output.globals – guessing 'momentImported'
WARNING: No name was provided for external module 'odata-parser' in output.globals – guessing 'parser'
当我尝试将库绑定到通用模块定义时,我会收到此消息。可以通过在ng-package.json.中添加umdModuleId来修复该警告
文件为我们提供了以下解释:
在编写UMD捆绑包时,ng packagegr会尽力提供UMD模块标识符的公共默认值。此外,汇总将尽力猜测外部依赖项的模块ID。即便如此,您也应该确保外部依赖项是正确的。万一ng-packager不提供默认和汇总无法猜测正确的标识符,您应使用umdModuleId显式提供模块标识符在库的包文件部分,如下所示:。。。
umdModuleIds
:
外部依赖关系及其对应UMD模块的映射标识符。映射键是TypeScript/EcmaScript模块标识符。映射值是UMD模块ID。这张地图的目的是捆绑UMD模块文件(与
rollup
(。默认情况下,rxjs
、tslib
并且支持CCD_ 5依赖符号。
如何查找或检查必须添加到umdModuleId的moment、odata解析器或任何其他模块的UMD ID的正确性?
我发现文档也很难理解。ng-package.json
中的ng-packagerumdModuleIds
设置是将导入名称映射到UMD在javascriptglobal
对象中注册的模块ID。
我所说的导入名称是指,在你的打字脚本代码中:
import * as moment from 'moment';
字符串moment
应该是umdModuleIds
下的键。
该值应与包的UMD捆绑包中注册的全局变量匹配。如果您查看正在导入的JS文件,您将看到正在设置的global.X
值。对于moment.js,代码块为:
//! moment.js
;(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
global.moment = factory()
}(this, (function () { 'use strict';
线路global.moment = ...
为您提供所需。因此,为了正确导入时刻,您的ng-package.json
应该包括:
"lib": {
"entryFile": "src/public-api.ts",
"umdModuleIds": {
"moment": "moment"
}
}
在这种情况下,ng-packager的猜测是正确的——导入名称与UMD全局变量匹配,但您需要明确指定它,以便ng-package能够确定。
对于NPM依赖项,应该有另一种(也是更好的(方法可以解决这个问题,那就是将库依赖项添加到库package.json
文件中(package.json与ng-package.json文件位于同一目录中(。我会先尝试一下——我相信当依赖项包含在package.json.中时,ng-packager会正确地找到UMD模块ID
然而,如果您使用的是本地库(位于同一角度工作区中的库(,或者ng packagegr无法分析的库,则有必要查看UMD ID并确保它们匹配。例如,如果您为内部库使用作用域/名称空间名称,如@mycompany/util
,您将看到UMD模块ID注册如下:
File: ~/dist/util/bundles/mycompany-util.umd.js
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define('@mycompany/util', ['exports'], factory) :
(global = global || self, factory((global.mycompany = global.mycompany || {}, global.mycompany.util = {})));
}(this, (function (exports) { 'use strict';
因此,给定行global.mycompany.util =
,您需要指定UMD模块ID,如:
"umdModuleIds": {
"@mycompany/util": "mycompany.util"
...
}