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

Rollup无法解析无扩展名同后缀依赖问题求助

解决方案

核心问题分析

你遇到的问题有两个关键原因:

  1. nodeResolve 插件未配置要解析的扩展名列表,导致无法识别无扩展名的 .ts 文件
  2. 代码中使用的 @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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:48:29