Ember.js Ember CLI:是否有方法将(供应商)目录复制到/public/assets?

Ember.js Ember CLI:是否有方法将(供应商)目录复制到/public/assets?,ember.js,ember-cli,Ember.js,Ember Cli,在Ember CLI项目中,如果我将包含webfonts及其CSS样式表的目录添加到public/assets目录中,我可以将它们与@import'assets/font/regular/stylesheet.CSS之类的内容一起使用。这个很好用 理想的情况是,我希望将这些资产保留在我的git存储库之外,而是将它们作为客户端依赖项安装到bower,但是如何在Ember CLI构建中使用这些资产呢 文档在Brocfile.js中提到了app.import(FILE),它适用于CSS样式表,但不适用

在Ember CLI项目中,如果我将包含webfonts及其CSS样式表的目录添加到
public/assets
目录中,我可以将它们与
@import'assets/font/regular/stylesheet.CSS
之类的内容一起使用。这个很好用

理想的情况是,我希望将这些资产保留在我的git存储库之外,而是将它们作为客户端依赖项安装到bower,但是如何在Ember CLI构建中使用这些资产呢

文档在
Brocfile.js
中提到了
app.import(FILE)
,它适用于CSS样式表,但不适用于WOFF字体文件:

$ ember build
version: 0.0.28
Build failed.
Error: Path or pattern "nicefont.woff" did not match any files
at Object.multiGlob (/(PATH)/node_modules/ember-cli/node_modules/broccoli-static-compiler/node_modules/broccoli-kitchen-sink-helpers/index.js:216:13)
at /(PATH)/demo/node_modules/ember-cli/node_modules/broccoli-static-compiler/index.js:25:27
at invokeCallback (/(PATH)/node_modules/ember-cli/node_modules/rsvp/dist/commonjs/rsvp/promise.js:228:21)
at publish (/(PATH)/node_modules/ember-cli/node_modules/rsvp/dist/commonjs/rsvp/promise.js:176:9)
at publishFulfillment (/(PATH)/node_modules/ember-cli/node_modules/rsvp/dist/commonjs/rsvp/promise.js:312:5)
at flush (/(PATH)/node_modules/ember-cli/node_modules/rsvp/dist/commonjs/rsvp/asap.js:41:9)
另外,我想指定一个目录,即
app.import()
app


有没有一种Ember CLI/Brocolli方法可以做到这一点?

我本以为我在这个问题上被卡住了,但显然,一杯茶和对StackOverflow问题的明确表述将我推向了正确的方向

如果使用bower安装客户端依赖项,则在Ember CLI项目中,这些依赖项将最终位于
供应商/
中。为了在不改变它们的情况下使用它们的(部分),我们可以使用西兰花略显笨拙的名称。首先,安装两个构建时依赖项:

npm install --save-dev broccoli-static-compiler
npm install --save-dev broccoli-merge-trees
Brocfile.js
中,在
EmberApp
导入的顶部添加:

var mergeTrees=require('brocoli-merge-trees');
var pickFiles=require('brocoli-static-compiler');
Brocfile.js
的底部:

//删除此行:
//module.exports=app.toTree()
//仅复制相关文件:
var fontOpenSans=pickFiles('vendor/font-opensans'{
srcDir:“/”,
文件:['***.woff','***/stylesheet.css'],
destDir:“/assets/fonts”
});
//合并应用程序树和我们的新字体资产。
module.exports=mergeTrees([app.toTree(),fontOpenSans]);
在这里,我们的客户端依赖关系是一个
字体opensans
,它指的是一个本地git存储库,其中包含一个opensanswebfont的副本

就这些!要使用web字体,请从
index.html
链接到
assets/


这是通过ember cli 0.0.40和一些早期版本进行测试的。

类似于ember cli 0.0.40版本中的答案,我最终在
模块导出之前的
应用程序下导入
。我使用增强模式来封装我正在尝试做的事情,这样当/如果不再需要它,或者有更好的方法来做时,我可以轻松地清理它,并删除不再使用的模块

/* global require, module */

var EmberApp = require('ember-cli/lib/broccoli/ember-app');

var app = new EmberApp();

// Use `app.import` to add additional libraries to the generated
// output files.
//
// ... [comments omitted]

app.import('vendor/moment/moment.js');

var tree = app.toTree();

tree = (function mergeFontAwesomeTree(tree) {
  var mergeTrees = require('broccoli-merge-trees');
  var pickFiles = require('broccoli-static-compiler');
  var fontawesome = pickFiles('vendor/fontawesome/fonts', {
    srcDir: '/',
    destDir: '/fonts'
  });
  return mergeTrees([tree, fontawesome]);
})(tree);

module.exports = tree;

支持的答案有点过时。在编写本文时,Ember CLI 0.2.2支持直接复制
资产
目录中所需的供应商文件夹/对其进行指纹识别

// Brocfile.js
var app = new EmberApp();
...
var extraAssets = new Funnel('bower_components/a-lovely-webfont', {
  srcDir: '/',
  include: ['**/*.woff', '**/stylesheet.css'],
  destDir: '/assets/fonts'
});

module.exports = app.toTree(extraAssets);

文档

我认为我们应该开始在问题和答案中指定我们正在使用的ember cli版本。使用ember/ember cli只需几周时间,答案不再适用于最新版本。我刚刚意识到您回答了自己的问题。哈哈。所以可以安全地假设您的答案适用于问题输出中显示的相同版本!很抱歉。我仍然认为最好先提到这个版本。不,你是绝对正确的。我已经添加了ember cli版本。