0

我在我的应用程序中使用了 StealJS + Bower 集成,但是我的几个 Bower 组件(包括es6-collections)不包含 bower.json 文件。因为es6-collections是我项目的 bower.json 文件中的依赖项之一,所以 StealJS 尝试加载es6-collections组件的 bower.json 文件,因为它不存在而找不到它,并抱怨:Unable to load the bower.json for es6-collections.我尝试使用System.config({ path: { 'es6-collections': '...' } })来通知 StealJS 脚本的路径加载时使用es6-collections,但这无济于事。我该怎么做才能让 StealJS 加载这个组件?

4

1 回答 1

1

假设

所以我要做几个假设:

  • 你正在使用从凉亭偷东西
  • 你是直接从 github “凉亭安装”的 es6-collections
  • 您通过使用 HTML加载“主”文件来隐式使用system-bower 插件<script src="bower_components/steal/steal.js" main="main"></script>

如果这些事情看起来大多是真实的,那么您可能只需要在文件中添加一些配置bower.json以使错误/警告静音并让一切按预期工作。

解释:

因此,因为 system-bower 插件(您正在隐式使用它,因为窃取检测到它正在从bower_components目录加载)使用组件bower.json文件来确定入口点,所以在这种情况下,错误/警告来自无法找到 es6-集合bower.json文件。

解决方案:

所以我们只需要告诉系统(被窃取)在哪里可以找到那个模块并且它可以停止寻找它的bower.json文件。

我们可以通过向"system"bower.json 添加一个属性并添加一些像这样的配置数据来做到这一点......

"system": {
  "paths": {
    "es6-collections": "bower_components/es6-collections/index.js"
  },
  "bowerIgnore": ["es6-collections"],
  "meta": {
    "es6-collections": {
      "format": "global"
    }
  }
}
  • 那里的paths配置告诉系统在哪里可以找到模块
  • bowerIgnore数组告诉system-bower不要寻找那个bower.json模块
  • 并且meta配置在那里告诉系统将此模块视为将添加到全局对象(浏览器中的窗口)的脚本,由于 es6-collections 的编写方式,您可能应该为这个特定模块执行此操作:如果它没有什么要 pollyfill ,它会导出一个空对象,所以你不能使用导出的对象,最好只使用它,就好像它是一个全局模块一样。

有关所有这些事情的更多信息...

http://stealjs.com/docs/bower.html

https://github.com/systemjs/systemjs/wiki/Meta-Configuration

http://stealjs.com/docs/steal.html

只是在这里有一个工作示例https://gist.github.com/BigAB/c108bb0860c9cfee3d6a是三个文件,您可以复制粘贴/克隆,然后执行bower install并查看它是否有效。

于 2015-09-08T21:49:41.927 回答