有几件事我错过了,也许加载项指南可以更清楚。
首先,我认为漏斗图采用的是目录路径,而不是完整的文件路径。在此基础上,路径必须是完整的文件路径。这并没有立即从FastBoot插件指南中清除。
所以看起来像这样:
const assetDir = path.join(this.project.root, 'node_modules', 'slick-carousel', 'slick');
var browserVendorLib = new Funnel(assetDir, {
files: ['slick.js'],
destDir: 'slick'
});
你不能做的是
const assetDir = path.join(this.project.root, 'node_modules', 'slick-carousel', 'slick', 'slick.js);
var browserVendorLib = new Funnel(assetDir);
这会引发:
enotdir:不是目录
我相信,因为漏斗期望的是目录路径而不是文件路径。
其次,在包含的hook gaurav中,在github上正确地指出了导入语句需要更改为指向供应商目录。
所以我的最终解决方案是:
treeForVendor(defaultTree) {
var map = require("broccoli-stew").map;
var Funnel = require("broccoli-funnel");
const mergeTrees = require('broccoli-merge-trees');
const assetDir = path.join(this.project.root, 'node_modules', 'slick-carousel', 'slick');
var browserVendorLib = new Funnel(assetDir, {
files: ['slick.js'],
destDir: 'slick'
});
browserVendorLib = map(browserVendorLib, (content) => `if (typeof FastBoot === 'undefined') { ${content} }`);
return new mergeTrees([defaultTree, browserVendorLib]);
},
included: function(app) {
this._super.included(app);
app.import('node_modules' + '/slick-carousel/slick/slick.css');
app.import('node_modules'+ '/slick-carousel/slick/slick-theme.css');
app.import('node_modules' + '/slick-carousel/slick/fonts/slick.ttf', { destDir: 'assets/fonts' });
app.import('node_modules' + '/slick-carousel/slick/fonts/slick.svg', { destDir: 'assets/fonts' });
app.import('node_modules' + '/slick-carousel/slick/fonts/slick.eot', { destDir: 'assets/fonts' });
app.import('node_modules' + '/slick-carousel/slick/fonts/slick.woff', { destDir: 'assets/fonts' });
app.import('node_modules' + '/slick-carousel/slick/ajax-loader.gif', { destDir: 'assets' });
// import the above library into vendor.js that was merged with the vendor trees. In browser the library will be eval'd and run
// In fastboot, the library will not be eval'd
app.import('vendor/slick/slick.js');
}