场景:我想知道访问使用插件的项目的根路径的正确方法 - 这在测试时也有效...
例如,插件:// ember-cli-myaddon/index.js
{
...
contentFor(name) {
if (name ==='body') {
var filePath = path.join(this.app.project.root, 'app/some-file.html')
var file = fs.readFileSync(filePath);
return [file];
}
},
...
}
^在实际项目中使用插件时有效。
但是,当我为插件运行测试时,this.app.project.root
为~/ember-cli-myaddon/app/some-file.html
当我期望(需要)它是~/ember-cli-myaddon/tests/dummy/app/some-file.html
答案 0 :(得分:3)
经过一些外来挖掘后,我遇到了一个用于ember-cli-mirage的伟大的sol'n,https://github.com/samselikoff/ember-cli-mirage/blob/master/ember-cli-build.js
要点是文件路径是在插件的 ember-cli-build.js 中指定的,插件从该属性读取,当空白时默认为this.app.project.root
。
e.g。
// ember-cli-myaddon/index.js
// added this
included: function() {
this.addonPath = this.app.options['myaddon']['directory'] || 'app';
},
// modified filePath
contentFor(name) {
if (name ==='body') {
var filePath = path.join(this.app.project.root, this.addonPath, 'some-file.html');
var file = fs.readFileSync(filePath);
return [file];
}
}
然后在插件的 ember-cli-build.js 文件中指定虚拟应用程序的目录:
// ember-cli-build.js
/* global require, module */
var path = require('path');
var EmberApp = require('ember-cli/lib/broccoli/ember-addon');
module.exports = function(defaults) {
var app = new EmberApp(defaults, {
'myaddon': {
directory: path.join('tests', 'dummy')
}
});
return app.toTree();
};
现在,插件测试会在以下位置查找 some-file.html ember-cli-myaddon / tests / dummy / app / some-file.html
在实际项目中, some-file.html 在以下位置查找:
您的项目/应用/一些-file.html
另外,您可以获得允许用户在 ember-cli-build.js 文件中配置文件路径的好处!赢/ WIN /赢