You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NPM Workspace+Vite项目:如何移除导入路径中的dist前缀?

解决Vite无法解析@my-project/core/plugins/Input的方案

方案一:使用package.json的exports字段(推荐)

在core包的package.json中添加exports字段——这是Node.js标准的模块导出映射,Vite/Rollup会优先读取该配置解析导入路径,配合已有的typesVersions可同时保证类型和模块解析正常:

{
  "name": "@my-project/core",
  // 保留原有字段...
  "typesVersions": {
    "*": {
      "*": ["./dist/*"]
    }
  },
  "exports": {
    "./plugins/*": {
      "types": "./dist/plugins/*.d.ts",
      "import": "./dist/plugins/*.js",
      "require": "./dist/plugins/*.cjs"
    }
    // 若有其他需要映射的目录(如utils),可按同样格式添加
  }
}

如果你的编译产物只有ES模块(均为.js),可简化配置:

"exports": {
  "./plugins/*": "./dist/plugins/*.js"
}

该配置会告知Vite:当导入@my-project/core/plugins/Input时,实际读取core/dist/plugins/Input.js文件,同时typesVersions确保TypeScript能找到对应类型文件。

方案二:配置Vite的resolve.alias

若不想修改core包配置,可在examples项目的vite.config.js中添加路径别名,手动映射导入路径到dist目录:

import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import path from 'path';

export default defineConfig(() => {
  return {
    build: {
      outDir: 'build',
    },
    plugins: [
      react({
        include: '**/*.{jsx,tsx}',
      }),
    ],
    resolve: {
      alias: [
        {
          // 正则匹配所有@my-project/core开头的导入路径
          find: /^@my-project\/core\/(.*)$/,
          // 替换为core/dist下对应的编译文件,自动补全.js后缀
          replacement: path.resolve(__dirname, '../core/dist/$1.js')
        }
      ]
    },
    server: {
      port: 3000,
      host: true,
    },
    preview: {
      port: 4000,
    },
  };
});

注意事项

  • 确保core包已完成编译,dist目录下存在对应的plugins/Input.js和Input.d.ts文件;
  • 方案一符合现代模块规范,可同时兼容Vite、TypeScript及Node.js环境,优先推荐;
  • 两种方案任选其一即可,无需重复配置。

内容的提问来源于stack exchange,提问作者IanelGreenleaf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 10:33:21