Rollup无法解析无扩展名同后缀依赖问题求助
解决方案
核心问题分析
你遇到的问题有两个关键原因:
nodeResolve插件未配置要解析的扩展名列表,导致无法识别无扩展名的.ts文件- 代码中使用的
@server路径别名未在 Rollup 中配置解析规则
步骤1:安装必要插件
补充安装两个关键插件:
npm install @rollup/plugin-alias @rollup/plugin-typescript tslib --save-dev
步骤2:修改Rollup配置
更新配置文件,补上扩展名解析、别名映射和TypeScript编译支持:
import { resolve } from "path"; import commonjs from "@rollup/plugin-commonjs"; import { nodeResolve } from "@rollup/plugin-node-resolve"; import json from "@rollup/plugin-json"; import { babel } from "@rollup/plugin-babel"; import alias from "@rollup/plugin-alias"; import typescript from "@rollup/plugin-typescript"; // 注意:扩展名必须带开头的点,之前的配置里.ts漏了点 const extensions = [".js", ".jsx", ".es6", ".es", ".mjs", ".ts", ".tsx"]; export default { input: "src/server/server.ts", output: { dir: "dist/server", format: "cjs", // 确保生成的require语句使用正确的.js扩展名 entryFileNames: "[name].js", chunkFileNames: "[name].js", }, external: [/entryServer/i], plugins: [ // 优先处理路径别名 alias({ entries: [ // 根据实际项目结构调整@server对应的目录 { find: "@server", replacement: resolve(__dirname, "src/server") } ] }), json(), // 配置nodeResolve解析指定扩展名的文件 nodeResolve({ preferBuiltins: true, extensions }), commonjs(), // 添加TypeScript编译支持,配合tsconfig.json使用 typescript({ tsconfig: resolve(__dirname, "tsconfig.json"), extensions, tslib: require.resolve("tslib") }), babel({ babelHelpers: "bundled", exclude: "node_modules/**", configFile: resolve(__dirname, "babel.node.js"), extensions, }), ], };
关键配置说明
nodeResolve.extensions:告诉插件尝试解析这些扩展名的文件,直接解决无扩展名导入的解析问题@rollup/plugin-alias:将@server别名映射到实际文件路径,让Rollup能定位到对应模块@rollup/plugin-typescript:专门处理TypeScript编译和模块解析,配合Babel能更顺畅地处理TS语法- 输出配置:明确指定输出文件后缀为
.js,确保生成的require语句符合Node.js的模块解析规则
额外注意事项
- 检查
tsconfig.json,确保compilerOptions.module设置为ESNext或ES2020,让Rollup能正确处理ES模块语法 - 若项目较大,可替换
@rollup/plugin-typescript为rollup-plugin-typescript2,它支持编译缓存,能提升打包速度
内容的提问来源于stack exchange,提问作者JDH
相关产品推荐
相关产品推荐

