gpt4 book ai didi

javascript - 如何更改 webpack 模块导出需要字符串?

转载 作者:行者123 更新时间:2023-12-03 20:10:52 25 4
gpt4 key购买 nike

例如,当使用 webpack 创建 bundle 时,它​​输出 angular 如下。
/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js");
但我希望输出是这样的:
/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "@angular/core");
网上说要改resolve.alias ,但我的理解是,如果我更改 resolve.alias ,这次找不到我使用的模块的路径。

我不是很受 webpack 支配,但我确信有解决这个问题的方法。有没有可用的解决方案?

const path = require('path');

module.exports = {
resolve: {
alias: {
//I'm stuck there
}
}
};

UPDATE



enter image description here

这个问题恰好出现在以下场景中,例如 C 模块使用 X库 .同时在 下打开这个C模块一个模块 ,A 模块的子模块。模块 A 和 C 在 2 个不同的项目上编译。我将 X 库捆绑在 中模块 A .我不捆绑 X模块在 C 模块内部。因为我知道在 模块 A , 这个 模块 X 是捆绑的。然而,C 模块开发者得到 X模块从“ D:\X-Library ”文件路径引用,而 A 模块开发人员从“ D:\Libraries\X-Library ”文件路径获取 X 模块引用.通过这些引用,Webpack 从包中调用 X 模块。最后,在A模块里面打开C模块,想使用X模块时,请求“ D:\X-Library ”为 _webpack_require (" D:\X 库 ")。但是,模块 X 被模块 A 注册为 _webpack_require (" D:\Librarires\X-Library ")。这就是为什么它不起作用。我希望我可以, 的 child 一个模块 .模块 A 和 C 在 2 个不同的项目上编译。我捆绑了 X库在模块 A 内。我没有将 X 模块捆绑在 C 模块内。因为我知道在模块 A 中,这个模块 X 是捆绑的。但是,C 模块开发人员从“ D:\X-Library ”文件路径获取 X 模块引用,而 A 模块开发人员从“ D:\Libraries”获取 X 模块引用\X-Library "文件路径。通过这些引用,Webpack 从包中调用 X 模块。最后,在A模块里面打开C模块,当它要使用X模块时,请求“ D:\X-Library”为_webpack_require(“ D:\X-库 ")。但是,模块 X 被模块 A 注册为 _webpack_require (" D:\Librarires\X-Library ")。这就是为什么它不起作用。我希望我可以。

最佳答案

对于 Angular 8.3.5 版,我通过向 webpack 编写插件得到了解决方案。

在 Compliation Hooks 中,模块 ID 优化后,如果我更改 ID,我可以在创建包之前将其转换为我想要的格式。

module.exports = class ChangeRequireStringPlugin {
constructor(options) {
this.options = options;
}
apply(compiler) {
compiler.hooks.compilation.tap('ChangeRequireStringPlugin', compilation => {
compilation.hooks.afterOptimizeModuleIds.tap('ChangeRequireStringPlugin', (modules) => {
for (let i = 0; i < this.options.length; i++) {
let module = modules.find(s => s.id == this.options[i].path)
if (module) {
module.id = this.options[i].to;
}
}
});
});
}
};

和 webpack.config.js
const path = require('path');
const ChangeRequireStringPlugin = require("./ChangeRequireStringPlugin/ChangeRequireStringPlugin");
module.exports = {
plugins: [new ChangeRequireStringPlugin([
{
path: "./node_modules/@angular/core/fesm2015/core.js",
to:"@angular/core"
}
])]
};

这是最好的解决方案吗?我不确定,但他现在正在做我的工作。

Webpack 5 带有 after Runtime Requirements 选项。当它来的时候,最好用钩子(Hook)来解决它。 https://webpack.js.org/api/compilation-hooks/#beforeruntimerequirements

我实现这个插件的示例项目: https://github.com/mcantonbul/Angular-Webpack-Change-Require-String

关于javascript - 如何更改 webpack 模块导出需要字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58725177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com