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

本地安装的npm模块正常,从npmjs安装的在NextJS中报模块未找到错误?

NextJS构建时无法找到从npm安装的模块文件,但本地安装正常

我开发了一个npm模块,在本地通过文件夹路径安装(npm i <path to my package>)时,NextJS项目执行next build或npm run build完全正常;但从npm仓库安装(npm i localisr@dev)后,构建时会抛出模块找不到的错误。该模块在CRA React项目和NodeJS应用中运行都没问题,只有NextJS出现这个问题。

模块内的代码

LocalisrClient.js

export class LocalisrClient {
    client;
    language = 'en';
    constructor(authorizationToken, projectToken) {
        this.client = new HttpClient(authorizationToken, projectToken);
    }
    // ...其他方法
}

index.js

import { LocalisrClient } from './LocalisrClient';
export { LocalisrClient };

报错信息

unhandledRejection Error [ERR_MODULE_NOT_FOUND]: Cannot find module '<path to project>/node_modules/localisr/dist/mjs/LocalisrClient' imported from <path to project>/node_modules/localisr/dist/mjs/index.js

可能的解决思路

  • 检查package.json的导出与文件配置
    确认模块的package.json中exports字段是否正确映射了ES模块路径,同时确保files字段包含dist目录,避免npm发布时遗漏文件:

    "exports": {
      ".": {
        "import": "./dist/mjs/index.js",
        "require": "./dist/cjs/index.js"
      }
    },
    "files": [
      "dist"
    ]
    
  • 验证构建后的文件完整性
    本地执行构建命令后,检查dist/mjs目录下是否存在LocalisrClient.js。若构建脚本只打包了index.js却遗漏了依赖模块,会导致npm安装后找不到文件。

  • 配置NextJS转译第三方模块
    在NextJS项目的next.config.js中添加transpilePackages,强制NextJS转译你的模块:

    /** @type {import('next').NextConfig} */
    const nextConfig = {
      transpilePackages: ['localisr'],
    }
    module.exports = nextConfig;
    

    NextJS默认不会转译node_modules中的ES模块,未转译的语法或路径规则可能引发解析错误。

  • 补全导入路径的扩展名
    ES模块解析要求显式文件扩展名,修改index.js中的导入语句:

    import { LocalisrClient } from './LocalisrClient.js';
    

    本地安装时可能因软链接或本地解析规则忽略扩展名,但npm安装后的真实路径需要完整扩展名。

  • 确认npm发布包的内容
    用npm pack生成本地发布包,解压后检查dist/mjs目录文件是否与本地构建一致,排查是否存在发布时漏传文件的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 13:12:11