我们在编译时运行webpack,但希望在运行时允许自定义扩展。插件的位置是已知的,但不知道插件的数量或名称。这些只能在运行时确定。此外,这些插件可以有自己的依赖关系。webpack是如何做到这一点的?
我可以离开那个角落使用RequireJS,但在我看来,Webpack -> RequireJS的迁移是一件完全或根本不存在的事情(例如,因为它们都定义了window.require)。
背景:这在RequireJS中很好:我们发布了一个用于在客户硬件上安装的产品(例如Jira、Jenkins或Owncloud)。在某些安装中,客户使用文档化的API编写自己的仪表板小部件。我们有一个REST调用,它列出了存在哪些/opt/custom/extensions/dashboard/*.js。其中每一个都可以有自己的依赖关系,例如:
define([
'css!./custom-widget-A.css',
], function () {
// bla bla
}因此,考虑到我有['custom-widget-A.js','custom-widget-B.js'],如何在运行时加载这些扩展,包括它们的依赖项?
我可以更改所有的自定义扩展,也可以要求用户在添加自定义扩展时运行/usr/bin/updateCustomExtensions。
我不想要node_modules (包括)。webpack)在机器上,但我们可以,如果那是唯一的办法。
我们需要避免机器上原始的、不受限制的资源,只需要避免我们的小型资源的捆绑(出于法律原因-不是我的决定)。
那么:如何编写/usr/bin/updateCustomExtensions和function loadModules
// I'm guessing the API needs to be async, since we only know the plugins
// at run-time
function loadDashboardExtensions(callback) {
// Load them
getCustomListFromREST(function (modules) {
loadModules(modules, function () {
// Caller code that uses extensions
callback();
});
});
}
function loadModules () {
????
}发布于 2019-06-05 10:07:48
我们仍然可以使用RequireJS。RequireJS同时设置了window.require和window.requirejs。window.require是webpack写的,而window.requirejs不是。
因此,上面的function loadModules可以替换为requirejs,如下所示:
function loadDashboardExtensions(callback) {
// Load them
getCustomListFromREST(function (modules) {
requirejs(modules, callback);
});
}我喜欢答案的代码比问题的短。
如果需要向加载的模块提供webpack代码中的依赖项,则可以通过其导出/定义的函数将其提供给各个模块。
https://stackoverflow.com/questions/41530942
复制相似问题