外部模块未提供名称

55

我创建了一个数据库,然后尝试将该数据库包含到另一个创建的库中。构建正常,但收到了“在output.globals中未提供外部模块'my-data'的名称-猜测是'myData'”。我错过了什么?

重新创建步骤如下。

  • ng new test-project --create=application=false
  • cd test-project
  • npm audit fix
  • ng g library my-data
  • ng g library my-core
  • ng g application address-book
  • ng build my-data
  • 然后在my-core.module中添加import { MyDataModule } from 'my-data';
  • 接着在my-core.module中添加imports: [MyDataModule]
  • ng build my-core

my-core.module.ts

import { NgModule } from '@angular/core';
import { MyCoreComponent } from './my-core.component';
import { MyDataModule } from 'my-data';

@NgModule({
  declarations: [MyCoreComponent],
  imports: [MyDataModule],
  exports: [MyCoreComponent]
})
export class MyCoreModule { }
  • 构建后收到“在output.globals中未为外部模块'my-data'提供名称 - 猜测为'myData'”的提示

构建后收到“在output.globals中未为外部模块'my-data'提供名称 - 猜测为'myData'”的提示

Pari Baker,没有数据,你已经拥有完整的步骤。我没有创建任何组件或模块,也没有向应用程序添加任何代码。如果您按照上述步骤进行操作,您将得到相同的结果。 - user8508357
R. Richards,我只是想了解Angular 6/7中的库是如何工作的,因为我有一个Angular 5应用程序,计划将其移植到Angular 7。再次强调,没有什么需要测试的,因为我还没有添加任何代码,我只是按照上面概述的步骤运行并得到了那个消息,现在正在尝试理解其中的原因。 - user8508357
2个回答

124

这是由于您有一个外部依赖项,并且需要声明使用的名称,以便rollup在构建my-core的UMD捆绑包时知道要查找什么。

要修复此警告,请在ng-package.json中声明您的my-data

{
  "$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
  "dest": "../../dist/my-core",
  "lib": {
    "entryFile": "src/public-api.ts",
    "umdModuleIds": {
      "my-data": "my-data"
    }
  }
}

我认为这是因为所有依赖项都被视为外部的,而且您的my-data没有通过类似npm之类的东西安装,因此您需要声明所期望的UMD模块ID。请参见https://github.com/ng-packagr/ng-packagr/blob/master/docs/dependencies.md#resolving-umd-module-identifiers


1
成功了!在阅读“解决UMD模块标识符”这篇文章之前,我永远不会将该文章与错误联系起来。非常感谢提供的信息。不确定如果没有从Angular 5转向Angular 7,我如何知道这个问题,或者甚至知道要查找什么。 - user8508357
4
@TyShowers,如果答案对您有所帮助,请将他的答案标记为“已采纳”以供其他读者参考。 - Saturn K
如果我的库有一个作用域,比如说 @foobar,那么我尝试像下面这样做:"umdModuleIds": { "@foodbar/my-data": "my-data" } 但是这并不起作用,有什么想法吗? - Raphaël Balet
我认为你需要让这两个条目相同,即 "umdModuleIds": { "@foodbar/my-data": "@foodbar/my-data" }。我大约18个月没有使用Angular库了,可能还有其他的变化。 - bniedermeyer

4

如果还有其他人因为这个错误而来到这里,上面的方法看起来太麻烦或者你只是想知道自己改了什么导致突然需要这样做(就像我一样),那么请继续阅读。

在我的情况下(为了使jest正常工作),我已经在tsconfig中进行了以下更改:

  "compilerOptions": {
    "module": "commonjs",
    "target": "esnext",
  "angularCompilerOptions": {
    "preserveWhitespaces": false
  }

返回:

  "compilerOptions": {
    "module": "esnext",
    "target": "es5"
}

我不知道为什么这个起作用,还在阅读上面回答者提供的引导信息,并且仍在尝试让Jest测试和我的库构建成功。无论如何,希望这能帮助到某个人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接