我有一个ember应用程序和一个文件playGame/game.js
的文件夹。这个文件包含游戏逻辑,我想导入它进行资产编译。
如果此文件位于app/playGame/game.js
下,而我的Brocfile是这样的:
app.import('app/playGame/game.js')
这会导致错误,路径或模式app/playGame/game.js
与任何文件都不匹配..
但如果我把文件放在bower_components/playGame/game.js
和我的Brocfile:
app.import('bower_components/playGame/game.js')
,这成功编译。
这里有什么问题和解决方案?
答案 0 :(得分:2)
这有两个部分:
app
- 文件夹中?执行所需操作的方法是在根目录中创建一个名为vendor
的文件夹,将文件放在其中的某个位置,然后将其导入Brocfile.js
,如下所示:
app.import('vendor/playGame/game.js');
这是documented on ember-cli.com,虽然有些隐藏。
您也可以将其放在bower_components
中,但该文件夹适用于安装bower
的内容,理论上可以删除(事实上,这是针对各种问题的常见建议)。 bower_components
中的内容默认情况下也未签入版本控制,在这种情况下您可能希望这样做。
这可以解决您的问题。
现在,为什么不能将它放在/app
?
app
是一个特殊文件夹。来自文档:
包含您的Ember应用程序代码。这里有Javascript文件 文件夹是通过ES6模块转换器编译并连接的 到名为
app.js
的文件中。
这使您可以在应用中使用import
内容。 app
中的文件夹可直接在<appname>
命名空间下方,以及其他一些文件和文件夹(如config/environment
)。
示例:
import myWidget from 'my-app/widgets/my-widget';`
引用的文件是/app/widgets/my-widget.js
。
ember-cli
网站有some more resources for how to use modules。如果这没有任何意义,请阅读这些内容。
总结一下:
app
中,但这会使其成为您转换后的软件包的一部分,并且您必须在内部使用export
以及其他所有内容附带它。它最终会成为<appname>.js
vendor
中,然后按照上面的说明将其导入Brocfile.js
。它将成为vendor.js
的一部分并在您的应用代码之前加载。