【问题标题】:No name was provided for external module没有为外部模块提供名称
【发布时间】:2019-08-15 00:28:25
【问题描述】:

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

完成重新创建的步骤。

  • ng 新的测试项目 --create=application=false
  • cd 测试项目
  • npm 审计修复
  • ng g library my-data
  • ng g library my-core
  • ng g 应用程序地址簿
  • ng 构建我的数据
  • 然后在 my-core.module 中添加 import { MyDataModule } from 'my-data';
  • 然后在 my-core.module 中添加导入:[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'”

【问题讨论】:

  • Pari Baker,没有数据,你有上面的完整步骤。我没有创建任何组件或模块,也没有向应用程序添加任何代码。如果您按照上述步骤进行操作,您将得到相同的结果。
  • R.理查兹,我只是想了解库在 Angular 6/7 中是如何工作的,因为我有一个 Angular 5 应用程序,我计划移植到 Angular 7。同样,没有什么要测试的,因为我没有添加任何代码,我只需执行上述步骤并收到该消息并尝试了解原因。

标签: angular angular7


【解决方案1】:

对于因这个错误而来到这里的任何其他人,上述操作似乎很乏味,或者您只是想知道您更改了什么以使您像我一样突然需要这个。

在我的情况下(为了使笑话起作用)我在 tsconfig 中更改了以下内容:

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

返回:

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

我不知道为什么会这样,仍在阅读上述回答者提供的兔子洞,我仍在努力让开玩笑测试和我的图书馆建立起来。无论如何,我希望这对某人有所帮助。

【讨论】:

    【解决方案2】:

    这是因为您有一个外部依赖项,并且您需要声明使用的名称,以便汇总知道在构建 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

    【讨论】:

    • 成功了!阅读“解析 UMD 模块标识符”我永远不会将文章与错误相关联。谢谢(你的)信息。不知道我怎么会知道这一点,甚至不知道从 Angular 5 到 Angular 7 寻找这个。
    • @TyShowers,如果答案对您有帮助,您能否将他的答案标记为所有其他读者都接受?
    • @bniedermeyer 如果我的图书馆有一个范围,比如说@foobar,那么我确实尝试像下面的"umdModuleIds": { "@foodbar/my-data": "my-data" } 那样做,但这不起作用,有什么想法吗?跨度>
    • 我认为您需要两个条目相同,即 "umdModuleIds": { "@foodbar/my-data": "@foodbar/my-data" } 在过去 18 个月左右的时间里我没有使用过 Angular 库。有可能其他地方发生了变化。
    猜你喜欢
    • 2020-08-07
    • 2017-07-21
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    相关资源
    最近更新 更多