ROM*_*MAN 10 umd rollupjs angular ng-packagr
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'
Run Code Online (Sandbox Code Playgroud)
当我尝试将我的库绑定到通用模块定义时收到此消息。警告可以通过在 ng-package.json 中添加 umdModuleIds 来修复。
该文件为我们提供了以下解释:
在编写 UMD 包时,ng-packagr 尽最大努力为 UMD 模块标识符提供通用默认值。此外, rollup 将尽最大努力猜测外部依赖项的模块 ID。即使这样,您也应该确保外部依赖项的 UMD 模块标识符是正确的。如果 ng-packagr 不提供默认值并且 rollup 无法猜测正确的标识符,您应该通过在库的包文件部分中使用 umdModuleIds 来明确提供模块标识符,如下所示:...
umdModuleIds:
外部依赖关系及其对应的 UMD 模块标识符的映射。Map 键是 TypeScript / EcmaScript 模块标识符。映射值是 UMD 模块 ID。此映射的目的是正确捆绑 UMD 模块文件(带有
rollup)。默认情况下,支持rxjs,tslib和@angular/*依赖项符号。
如何查找或检查必须添加到 umdModuleIds 的 moment、odata-parser 或任何其他模块的 UMD ID 的正确性?
cri*_*mbo 17
我也发现文档很难理解。中的 ng-packagrumdModuleIds设置ng-package.json是导入名称到 UMD 在 javascriptglobal对象中注册的模块 ID 的映射。
通过导入名称,我的意思是,在您的打字稿代码中:
import * as moment from 'moment';
Run Code Online (Sandbox Code Playgroud)
字符串moment应该是 下的键umdModuleIds。
该值应与包的 UMD 包中注册的全局变量相匹配。如果您查看正在导入的 JS 文件,您将看到global.X正在设置的值。对于moment.js,代码块是:
import * as moment from 'moment';
Run Code Online (Sandbox Code Playgroud)
这条线global.moment = ...给你你需要的东西。因此,要正确导入时刻,您ng-package.json应该包括:
"lib": {
"entryFile": "src/public-api.ts",
"umdModuleIds": {
"moment": "moment"
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,事实证明 ng-packagr 的猜测是正确的 - 导入名称与 UMD 全局变量匹配,但您需要明确指定它以便 ng-packagr 确定。
应该有另一种(更好的)方法可以为 NPM 依赖项修复此问题,即将库依赖项添加到库package.json文件(与 ng-package.json 文件位于同一目录中的 package.json)。我会先尝试 - 我相信当依赖项包含在 package.json 中时,ng-packagr 会正确地找到 UMD 模块 ID。
但是,如果您使用的是本地库(同一角度工作区中的库)或 ng-packagr 无法分析的库,则有必要查看 UMD id 并确保它们匹配。例如,如果您为内部库使用范围/命名空间名称,例如@mycompany/util,您将看到 UMD 模块 ID 是这样注册的:
File: ~/dist/util/bundles/mycompany-util.umd.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';
Run Code Online (Sandbox Code Playgroud)
因此,给定这一行,global.mycompany.util =您需要指定 UMD 模块 ID,例如:
"umdModuleIds": {
"@mycompany/util": "mycompany.util"
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7833 次 |
| 最近记录: |