Due to 另一个问题,我必须在我的 vue3 应用程序中静态导入 HTML 中的 JS 依赖项。
/index.html
<head>
<!-- ... -->
<script type="module" src="node_modules/@telekom/scale-components-neutral/dist/scale-components/scale-components.esm.js"></script>
</head>
由于 Vite 无法正确捆绑此依赖项(由于问题,请参阅上面提到的帖子),我希望捆绑忽略它。在生产版本中,我希望 JS 模块按原样导入到根目录中index.html
.
我几乎尝试了所有内容optimizeDeps.exclude
config 属性,但 Vite 仍然尝试对其进行分析和预捆绑。
vite.config.ts
export default defineConfig({
optimizeDeps: {
exclude: [
// I tried pretty much everything here: no way to force vite pre-bundling to ignore it...
'scale-components-neutral'
'@telekom/scale-components-neutral'
'@telekom/scale-components-neutral/**/*'
'@telekom/scale-components-neutral/**/*.js'
'node_modules/@telekom/scale-components-neutral/**/*.js'
],
},
// ...
});
在每种情况下,运行后npm run build
,导入已从dist/index.html
.
什么是optimizeDeps.exclude
配置期望?
Edit
遵循此注释,发现https://vitejs.dev/guide/dep-pre-bundling.html:
依赖性预捆绑仅适用于开发模式,并使用 esbuild 将依赖项转换为 ESM。在生产版本中,使用@rollup/plugin-commonjs。
我试图指定build.commonjsOptions.exclude
config.
vite.config.js
export default defineConfig({
build: {
commonjsOptions: {
exclude: [
'scale-components-neutral',
'node_modules/@telekom/scale-components-neutral',
'node_modules/@telekom/scale-components-neutral/**/*',
'node_modules/@telekom/scale-components-neutral/**/*.js',
'/node_modules/@telekom/scale-components-neutral',
'/node_modules/@telekom/scale-components-neutral/**/*',
'/node_modules/@telekom/scale-components-neutral/**/*.js',
'**/node_modules/@telekom/scale-components-neutral',
'**/node_modules/@telekom/scale-components-neutral/**/*',
'**/node_modules/@telekom/scale-components-neutral/**/*.js',
'@telekom/scale-components-neutral',
'@telekom/scale-components-neutral/**/*',
'@telekom/scale-components-neutral/**/*.js',
'**/node_modules/@telekom/scale-components-neutral/dist/scale-components/scale-components.esm.js',
],
},
},
// ...
不再成功:导入剧照从dist/index.html
.
Edit 2
build.rollupOptions.external and build.dynamicImportVarsOptions.exclude很有希望(因为最初的问题涉及动态导入......)。
但运气不佳:JS 依赖关系仍然没有很好地捆绑。它可以在本地开发中运行,但不能在使用构建的已部署应用程序上运行npm run build
.