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中添加umdModuleIds来解决这个警告。
列表中的 文件 给了我们如下解释。
在编写UMD bundle时,ng-packagr会尽力为UMD模块标识符提供通用的默认值。同时,rollup会尽力猜测外部依赖的模块ID。 即便如此。您应该确保外部依赖的UMD模块标识符是正确的。. 如果ng-packagr没有提供一个默认值,rollup无法猜测正确的标识符,你应该在库的包文件部分使用umdModuleIds显式地提供模块标识符,就像这样。...
umdModuleIds
:
外部依赖关系和它们对应的UMD模块标识符的映射。映射键是TypeScript EcmaScript模块标识符。 映射值是UMD模块的id。这个映射的目的是正确地捆绑一个UMD模块文件(与
rollup
). 默认情况下。rxjs
,tslib
和@angular/*
支持依赖符号。
我如何找到或检查正确性的UMD ID的时刻,odata-parser或任何其他模块,必须添加到umdModuleIds?
我发现文档也很难理解。ng-packagr umdModuleIds
落入 ng-package.json
是UMD在javascript中注册的进口名称与模块ID的映射。global
对象。
我所说的导入名称是指,在你的typescript代码中。
import * as moment from 'moment';
字符串 moment
钥匙 umdModuleIds
.
这个值应该与包的UMD bundle中注册的全局变量相匹配。如果你看一下你正在导入的JS文件,你会看到下面的 global.X
的值进行设置。对于 瞬间.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-packagr的猜测是正确的--导入名称与UMD全局变量相匹配,但你需要明确地指定它,ng-packagr才能确定。
对于NPM的依赖关系,应该有另一种(而且是更好的)方法可以解决这个问题,那就是将库的依赖关系添加到库中。package.json
文件 (package.json 和 ng-package.json 文件在同一个目录下)。我会先试试--我相信当依赖关系包含在package.json中时,ng-packagr会正确地找到UMD模块的id。
但是,如果你使用的是本地库(在同一个angular工作区的库),或者是不能被ng-packagr分析的库,那么就需要查看UMD的id,确保它们匹配。例如,如果你的内部库使用了scopednamespaced的名字,比如说 @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"
...
}