【问题标题】:Module not found outside of main directory在主目录之外找不到模块
【发布时间】:2022-01-05 20:33:21
【问题描述】:

我有以下目录结构:

src/
    app/
        package.json
        node_modules/
        app.js
    tools/
       tool_A.js

tool_A.js 需要 express 包

app.js 需要 tool_A

我已经在 app/package.json 的需求中定义了 express 包,并且它已正确安装在 node_modules 文件夹中。

问题是,如果我运行 app/app.js,我仍然会收到错误:

Error: Cannot find module 'express'

有没有办法让它从根应用程序开始搜索模块,而不是外部目录?

【问题讨论】:

    标签: node.js package dependencies


    【解决方案1】:

    您可以将package.json 移动到根目录并在app.js 内部使用require("../tools/toolA.js")

    或者,您在 tools 内创建一个新包并为该包安装 express:

    .../src/tools> npm init
    [...]
    .../src/tools> npm i express
    

    根据您的描述,似乎第一个解决方案更适合您的情况,但理论上两者都有效。

    编辑理论上,虽然它并不干净,但您也可以使用require("../app/node_modules/express"),但是一旦 express 模块的路径发生变化,它就会中断。

    【讨论】:

    • 我正在使用docker,工具包含各种应用程序使用的几种方法,并非所有方法/类都被app.js使用,这就是我不想要单独的package.json的原因因为这意味着我需要在 docker 镜像中安装无用的包,而另一方面我会在所有应用程序之间混合包
    • @GioGio 查看我的编辑。基本上,如果你想使用 require("express"),你必须从安装了 express 的包中的文件中使用它。如果您想从该软件包外部访问 express,则需要指定 node_modules/express 文件夹的文件路径。
    猜你喜欢
    • 1970-01-01
    • 2020-12-27
    • 2016-10-27
    • 2021-03-12
    • 2017-02-13
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 2016-05-25
    相关资源
    最近更新 更多