我正在处理一个余烬应用程序。据我了解,它使用 Broccoli 构建应用程序。我有一个要求,我需要在构建过程开始之前通过运行节点脚本来处理应用程序中的一些文件。现在我单独运行节点脚本,然后启动 ember 服务器。实现它的正确方法是什么?我可以在 ember 构建过程中将其作为任务之一吗?我应该在哪里维护目录中的节点文件?
我会推荐一个实现preBuild
或postBuild
Ember CLI 插件钩子的存储库插件。插件钩子的文档记录很糟糕,但其他插件也有一些使用示例。例如ember-cli-deploy-build-plus
使用postBuild
钩子从生成输出中删除一些文件。
更高级的选择是实现一个西兰花插件并在treeFor*
钩子中使用该插件。如果您的自定义脚本需要从构建中添加/删除文件,这尤其有意义。ember-cli-addon-docs
是这种用法的一个很好的例子。
一种解决方案是利用存储库内插件,因为插件钩子为自定义提供了很多额外的点,比我知道的比ember-cli-build.js
多(据我所知)。
如果您想超越内置自定义或想要/需要更多 高级控制一般,以下是一些钩子 (键)可用于索引.js文件中的插件对象。所有钩子 期望一个函数作为值。
includedCommands: function() {},
blueprintsPath: // return path as String
preBuild:
postBuild:
treeFor:
contentFor:
included:
postprocessTree:
serverMiddleware:
lintTree:
在您的情况下,preBuild
听起来像票证:
此挂钩在生成发生之前调用。
您可以从index.js
require()
所需的任何文件
更简单的解决方案可能是在 ember-cli-build 中从构建脚本中调用函数.js在return app.toTree();
之前的某个地方
let my_build_script = require('./lib/my-build-script.js');
await my_build_script();
return app.toTree();
此方法的一些缺点包括:
- 如果可以在您的计算机上运行,它不会作为许多并行进程之一运行。 它
- 不会与构建的其余部分异步运行,相反,您必须等到它完成才能开始构建。
您可能需要修改构建脚本以返回可以调用的函数,并让它在完成后返回 promise。