1

场景:我想知道访问正在使用插件的项目的根路径的正确方法 - 这在测试时也有效......

例如,插件:

// 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

4

1 回答 1

3

在进行了一些 ember 插件挖掘之后,我发现了 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空白时。

例如

// 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被查找:
your-project/app/some-file.html

另外,您还可以获得允许用户在他们的ember-cli-build.js文件中配置文件路径的好处!赢/赢/赢

于 2015-11-11T16:58:03.967 回答