使用Broccoli/ember-cli包含一个自包含的资产bundle



我使用的是jquery ui,自编译:不是通过bower,而是直接从jquery ui网站生成和下载的。我已将其放入myapp/vendor/bundles/jquery-ui-1.11.2.custom

在我的Brocfile中,我正在加载CSS和JS资源:

app.import('vendor/bundles/jquery-ui-1.11.2.custom/jquery-ui.css');
app.import('vendor/bundles/jquery-ui-1.11.2.custom/jquery-ui.theme.css');
app.import('vendor/bundles/jquery-ui-1.11.2.custom/jquery-ui.js');

然后,CSS被包括在vendor.css资源中,js被包括在vendor.js资源中。

但这并没有提供完整的jqueryui组件。特别是,文件jquery-ui.css使用以下规则:

.ui-widget-content {
    border: 1px solid #72b42d;
    background: #285c00 url("images/ui-bg_inset-soft_10_285c00_1x100.png") 50% bottom repeat-x;
    color: #ffffff;
}

它正在对vendor/bundles/jquery-ui-1.11.2.custom/images/ui-bg_inset-soft_10_285c00_1x100.png中的图像进行寻址。该文件在dist文件夹中不可用。

url("images/...")是相对于CSS本身的路径的。这是jquery-ui组件的结构:

vendor/bundles/jquery-ui-1.11.2.custom/
├── external
│   └── jquery
│       └── jquery.js
├── images
│   ├── ui-bg_diagonals-small_0_aaaaaa_40x40.png
│   ├── ui-bg_diagonals-thick_15_444444_40x40.png
│   ├── ui-bg_diagonals-thick_95_ffdc2e_40x40.png
│   ├── ui-bg_glass_55_fbf5d0_1x400.png
│   ├── ui-bg_highlight-hard_30_285c00_1x100.png
│   ├── ui-bg_highlight-soft_33_3a8104_1x100.png
│   ├── ui-bg_highlight-soft_50_4eb305_1x100.png
│   ├── ui-bg_highlight-soft_60_4ca20b_1x100.png
│   ├── ui-bg_inset-soft_10_285c00_1x100.png
│   ├── ui-icons_4eb305_256x240.png
│   ├── ui-icons_72b42d_256x240.png
│   ├── ui-icons_cd0a0a_256x240.png
│   └── ui-icons_ffffff_256x240.png
├── index.html
├── jquery-ui.css
├── jquery-ui.js
├── jquery-ui.min.css
├── jquery-ui.min.js
├── jquery-ui.structure.css
├── jquery-ui.structure.min.css
├── jquery-ui.theme.css
└── jquery-ui.theme.min.css

我想为我的申请提供的是:

  • jquery-ui.css
  • jquery-ui.js
  • jquery-ui.theme.css
  • 图像/目录

如何在西兰花中解决这个问题?

我已经解决了(黑客入侵?)我的问题,所以我会在这里为其他人发布一个参考。如果有人能对所选的解决方案发表评论,我非常乐意收到评论:

我使用了与这里描述的类似的方法

首先,安装一些花椰菜工具:

npm install --save-dev broccoli-static-compiler
npm install --save-dev broccoli-merge-trees

现在修改您的Brocfile.js:

var mergeTrees = require('broccoli-merge-trees');
var pickFiles  = require('broccoli-static-compiler');
var EmberApp = require('ember-cli/lib/broccoli/ember-app');
...
// We provide bundles tree as-is
var bundlesTree = pickFiles('vendor/bundles', {
   srcDir: '/',
   files: ['*'],
   destDir: '/assets/bundles',
});
module.exports = mergeTrees([app.toTree(), bundlesTree]);

(不再app.import捆绑包)

现在捆绑包在dist/assets/bundles上可用,因此您可以手动在index.html中加载CSS和JS:

<link rel="stylesheet" href="assets/bundles/jquery-ui-1.11.2.custom/jquery-ui.css">
<link rel="stylesheet" href="assets/bundles/jquery-ui-1.11.2.custom/jquery-ui.theme.css">
...
<script src="assets/bundles/jquery-ui-1.11.2.custom/jquery-ui.js"></script>

由于CSS是直接从html加载的,因此对图像的相对引用运行良好,并在assets/bundles/jquery-ui-1.11.2.custom/images/...中获取正确的文件。

这很有效,但有点麻烦:它需要手动导入html文件上的资产。

有人知道只有Brocfile的替代方案吗?西兰花真的可以重新分配导入,以便相对引用透明地工作吗?怎样

相关内容

  • 没有找到相关文章