通过导入添加模块联合后设置 __webpack_public_path__

发布于 2025-01-11 14:17:18 字数 1496 浏览 0 评论 0原文

由于我们的应用程序在本机网站内的结构,我必须设置 __webpack_public_path__

但现在在 Angular 的新模块联合设置中,导入了 bootstrap.ts 脚本,并且不再设置 __webpack_public_path__ 。

有没有一种方法可以在运行时使用提升 bootstrap.ts 的最新方法设置 webpack_public_path

main.ts:

import('./bootstrap').catch(err => console.error(err));

bootstrap.ts

const getBaseOfModules = (script: string): string => {
  const src = document.querySelector<HTMLScriptElement>(`[src*="${script}"]`).src;
  return `${src.substring(0, src.lastIndexOf('/'))}/`;
};
__webpack_public_path__ = getBaseOfModules('main');

initAngularApp();

main.js 文件和其他延迟加载模块位于 http://some/deep/path/main.js

看起来 Angular 从最后一个 js 文件的 url 获取路径。

添加: 我已经根据文档尝试过这个..但这不起作用'。 该脚本也将在延迟加载模块内加载。

publicpath.ts

declare let __webpack_public_path__;

const getBaseOfModules = (script: string): string => {
  const src = document.querySelector<HTMLScriptElement>(`[src*="${script}"]`).src;
  return `${src.substring(0, src.lastIndexOf('/'))}/`;
};

// set the on the fly public path absolute for module lazy loading see https://webpack.js.org/guides/public-path/
export default __webpack_public_path__ = getBaseOfModules('main');

main.ts

import('@lib-utils/public-path');
import('./bootstrap').catch(err => console.error(err));

Because of the structure of our app inside a native website, I had to set the __webpack_public_path__ .

But now in the new module federation setup for angular the bootstrap.ts script is imported and the __webpack_public_path__ is not set anymore.

Is there a way I can set the webpack_public_path during runtime with the latest way of hoisting the bootstrap.ts?

main.ts:

import('./bootstrap').catch(err => console.error(err));

bootstrap.ts

const getBaseOfModules = (script: string): string => {
  const src = document.querySelector<HTMLScriptElement>(`[src*="${script}"]`).src;
  return `${src.substring(0, src.lastIndexOf('/'))}/`;
};
__webpack_public_path__ = getBaseOfModules('main');

initAngularApp();

The main.js file and other lazy loaded modules are served at http://some/deep/path/main.js

It looks like angular gets the path based from the url of the last js file.

Addition:
I have tried this according to documentation.. but that doesnt work'.
This script will be loaded also inside a lazyloaded module.

publicpath.ts

declare let __webpack_public_path__;

const getBaseOfModules = (script: string): string => {
  const src = document.querySelector<HTMLScriptElement>(`[src*="${script}"]`).src;
  return `${src.substring(0, src.lastIndexOf('/'))}/`;
};

// set the on the fly public path absolute for module lazy loading see https://webpack.js.org/guides/public-path/
export default __webpack_public_path__ = getBaseOfModules('main');

main.ts

import('@lib-utils/public-path');
import('./bootstrap').catch(err => console.error(err));

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

み零 2025-01-18 14:17:18

我找到了答案..我需要使用这个解决方案: Angular 4: "Cannot find name '要求'
使用 require 或 System.import

I found the answer.. I need to use this solution: Angular 4: "Cannot find name 'require'
using require or System.import

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文