使用 Grunt 时删除包 "was not injected in your file" 的警告?

Remove warning for package "was not injected in your file" when using Grunt?

我安装了 "angular-i18n" 作为 bower 依赖项。

当我 运行 grunt servegrunt build 我收到警告:

angular-i18n was not injected in your file. Please go take a look in "/$APP_ROOT/bower_components/angular-i18n" for the file you need, then manually include it in your file.

如何删除此消息?

制作 g运行t 将此文件插入我的 index.html 是否会删除此警告?

背景

看来您的 Grunt tasks are using wiredep to look at your Bower 依赖项并将用于加载其关联文件的标签(link 用于 CSS,script 用于 JS 等)注入到您的 HTML.

wiredep 通过查看项目中的 bower.json 文件来确定您需要什么,然后查看每个依赖项的 bower.json 文件来确定它们是什么来做到这一点需要等等。开发了一个依赖树后,wiredep 使用 main property in the bower.json 文件来确定每个需要的包中的哪些文件应该 link 编辑到您的 HTML.

当包没有适当的 bower 配置(缺少 bower.json 或 missing/improper main 属性)时,wiredep 会警告您该问题这样您就知道它无法自动添加您需要的内容。换句话说,它告诉您并非所有资产都已添加到您构建的 HTML,您需要手动干预以添加缺少的内容。

一般解

通常,您无法在自己的代码中纠正此问题。手动 link 编辑您 HTML 中的文件(在 wiredep 标记区域之外以避免被覆盖)将确保您的项目正常运行。 wiredep,但是运行的时候会一直警告你,因为包本身还是有问题的。您需要向问题包的所有者提出问题,以要求他们更正其包装元信息。

您遇到问题的项目

searched bower for the angular-i18n package and found that the project is hosted at https://github.com/angular/bower-angular-i18n . If you look at angular-i18n's bower.json 你可以看到它缺少 main 属性。这就是发出警告的原因。

不过,事实证明,该项目不提供 main 属性 似乎是合适的。 documentation for angular-i18n 表明您应该 bower install 它,然后手动 link 到适合 您所需语言环境 的文件。此包列出 main 文件是不合适的,因为它提供了许多文件,其中 none 应由包根据需要指定 - 这是开发人员的选择。

这种情况的可能解决方案

如果这个警告真的困扰你,或者你不喜欢手动 link 文件,你可以将这个包 fork 到你自己的 GitHub 帐户并修改 bower.json 文件将 main 指向您要加载的文件。然后,您将删除 angular-i18n 作为您项目的依赖项,并将您的 fork 的 repo 添加为依赖项。

注意事项:

  1. 如果您不熟悉维护 Git repos/forks。
  2. ,这可能会导致保持最新的问题
  3. 这仅在 angular-i18n 被列为您自己项目的显式依赖项并且 作为另一个项目的依赖项加载时才有效。如果另一个项目正在加载这个包,你必须开始沿着树一直向下分支项目,这样你就可以覆盖每个项目的配置。

总而言之,在这种情况下,最好手动 link 到您想要的文件并忽略警告。

我在 yeoman 项目中使用 angular-i18n 时收到此错误消息。 wiredep grunt 任务发出此错误消息。有2个解决方案:

1.排除 angular-i18n 并在 index.html

中手动包含文件

Gruntfile.js

wiredep: {
  app: {
    src: ['<%= yeoman.app %>/index.html'],
    ignorePath:  /\.\.\//,
    exclude: [
      'bower_components/angular-i18n'
    ]
  }
}

index.html

<script src="bower_components/angular-i18n/angular-locale_de-de.js"></script>

或:

2。 Override/Set bower_components/angular-i18n/bower.json

的主要属性

Gruntfile.js

wiredep: {
  app: {
    src: ['<%= yeoman.app %>/index.html'],
    ignorePath:  /\.\.\//,
    overrides: {
      'angular-i18n': {
        'main': 'angular-locale_de-de.js'
      }
    }
  }
}

我选择第二个选项覆盖主要属性。这样,在 index.html 中,angular-i18n 库仍然会被 grunt 任务自动注入。