使用 StealJS 加载缺少 bower.json 文件的 Bower 组件
Using StealJS to load Bower components lacking a bower.json file
我在我的应用程序中使用 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 加载这个组件?
假设
所以我要做一些假设:
- 你正在使用 bower 的窃取
- 您正在直接从 github“安装”es6 集合
- 您通过使用 HTML
<script src="bower_components/steal/steal.js" main="main"></script>
加载您的“主”文件来隐式使用 system-bower plugin
如果这些东西看起来大部分 正确 那么你可能只需要 在你的 bower.json
文件中添加一些配置使 error/warning 静音并让一切按预期工作。
解释:
所以因为 system-bower 插件(你隐式使用它是因为 steal 检测到它是从 bower_components
目录加载的)使用组件 bower.json
文件来确定入口点,所以在这种情况下 error/warning 来自无法找到 es6-collections 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
配置告诉系统将此模块视为将要添加到全局对象(浏览器中的 window)的脚本,您可能应该这样做由于 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 是三个文件,您可以 copy-paste/clone 然后执行 bower install
并查看它是否工作。
我在我的应用程序中使用 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 加载这个组件?
假设
所以我要做一些假设:
- 你正在使用 bower 的窃取
- 您正在直接从 github“安装”es6 集合
- 您通过使用 HTML
<script src="bower_components/steal/steal.js" main="main"></script>
加载您的“主”文件来隐式使用 system-bower plugin
如果这些东西看起来大部分 正确 那么你可能只需要 在你的 bower.json
文件中添加一些配置使 error/warning 静音并让一切按预期工作。
解释:
所以因为 system-bower 插件(你隐式使用它是因为 steal 检测到它是从 bower_components
目录加载的)使用组件 bower.json
文件来确定入口点,所以在这种情况下 error/warning 来自无法找到 es6-collections 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
配置告诉系统将此模块视为将要添加到全局对象(浏览器中的 window)的脚本,您可能应该这样做由于 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 是三个文件,您可以 copy-paste/clone 然后执行 bower install
并查看它是否工作。