.vue文件中使用import引入d3, 本地开发环境正常
import * as d3 from 'd3'
console.log('d3', d3)
build发布到线上后运行页面会报错
请问这是什么原因
d3版本:
"d3": "^7.9.0",
.vue文件中使用import引入d3, 本地开发环境正常
import * as d3 from 'd3'
console.log('d3', d3)
build发布到线上后运行页面会报错
请问这是什么原因
d3版本:
"d3": "^7.9.0",
根据描述和报错截图分析,这种情况通常是由于以下原因之一造成的:
Vite 生产环境使用 Rollup 打包时,对 D3 的 ES 模块解析可能有特殊要求:
// vite.config.ts
export default defineConfig({
build: {
rollupOptions: {
output: {
manualChunks: (id) => {
if (id.includes('d3')) return 'd3' // 强制将 D3 拆分到独立 chunk
}
}
}
},
optimizeDeps: {
include: ['d3'] // 确保 D3 被预构建
}
})D3 的某些子模块使用 CommonJS 导出,需在 vite.config.ts 中添加:
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
'd3-selection': 'd3-selection/dist/d3-selection.min.js'
}
}
})D3 可能依赖 window 或 global 对象:
<!-- index.html -->
<script>
window.global = window // Polyfill global 对象
</script>或在 vite.config.ts 中添加:
define: {
'window.global': {} // 注入全局变量
}尝试修改引入方式:
<script setup>
// 改为按需引入而非全局引入
import { select } from 'd3-selection'
import { scaleLinear } from 'd3-scale'
</script>根据截图 d3-selection.js 的错误:
npm install @types/d3-selection # 确保类型正确并在 tsconfig.json 中添加:
{
"compilerOptions": {
"types": ["d3-selection"]
}
}升级依赖:
npm install d3@7.9.0 --exact # 避免使用 ^ 锁定版本检查浏览器控制台:
若出现 process is not defined 错误:
// vite.config.ts
define: {
'process.env.NODE_ENV': `"${process.env.NODE_ENV}"`
}构建分析:
npm install rollup-plugin-visualizer -D// vite.config.ts
import { visualizer } from 'rollup-plugin-visualizer'
export default defineConfig({
plugins: [
visualizer({ open: true }) // 查看模块打包情况
]
})建议优先尝试 方案1+方案3 的组合。如仍有问题,请提供具体的错误堆栈信息进一步分析。