Ember CLI
中有开发、测试和生产环境。我有测试和生产服务器。我需要在测试服务器上进行构建,就像在生产服务器上一样,但使用另一种环境配置。但Ember CLI
中的测试env用于自动测试。
我尝试使用ember-cli-build.js
文件中的下一个选项在测试服务器上调用ember build --environment development
:
var app = new EmberApp(defaults, {
// Add options here
fingerprint: {
prepend: 'https://s-test.mycdn.com/',
enabled: true
}
});
但我得到了错误:
The Broccoli Plugin: [AssetRewrite] failed with:
TypeError: Cannot read property '2' of null
.....
The broccoli plugin was instantiated at:
.....
在测试服务器上构建ember应用程序的正确方法是什么?
3条答案
按热度按时间g6ll5ycj1#
这可能会让人感到困惑,但是您需要的是而不是环境。您需要的是部署目标。下面是一篇关于两者区别的博文:Do not confuse environment for deploy target(该URL已在www.example.com的重组/接管中被丢弃deveo.com但仍为snapshot exists on archive.org)。
在Ember中,环境是关于如何缩小代码、对资产进行指纹识别、启用/禁用某些调试功能等。它们不是关于您希望在哪里部署代码、希望使用哪个API URL或类似的任何内容。
您可能碰巧拥有名为
test
或development
的服务器,但是在部署到这些服务器时,您应该始终将环境设置为production
,而不是test
或development
。为了支持多个服务器(部署目标),我将使用env vars来实现这一点。
在
ember-cli-deploy.js
中,只需通过process.env.DEPLOY_TARGET
访问值,如下所示:我建议使用
ember-cli-deploy
插件来自动化这个过程,这样您只需键入ember deploy staging
就可以为staging
创建一个构建并部署它。gc0ot86w2#
不幸的是,ember-cli对环境的支持很差。你只有开发和生产版本,不能添加新的。最重要的是,生产版本会做一些额外的事情,比如缩小,指纹等,这些在测试/暂存服务器上不一定需要,而且很耗时。
好消息是我们可以访问environment.js中的Node API。事实上,environment.js是一个节点模块。这允许我们向
ember build
添加额外的参数并解析它们。我在ember-cli 2.7中成功地使用了这个技巧,在2.8中也使用了。您需要:1.安装minimist:
npm install minimist --save-dev
1.将以下代码添加到environment.js的开头:
1.在environment.js中使用
argv.subenv
来识别不同的“子环境”,我建议在“environment”块之后这样做:您可以根据需要在代码中合并
environment
和argv.subenv
。1.在构建时使用您的参数:Ember-cli将输出一个关于不支持参数的警告,但一切都将正常工作。
使用这种方法,您可以根据需要拥有任意多台服务器,并在其中任何一台服务器上构建应用的开发/生产版本。
至于你的错误,我不知道是什么原因造成的,可能你会发现一些here
v6ylcynt3#
当参数等于
staging
时,编辑config/environment.js
以设置环境。例如:功能(环境){
};