使用NPM安装时找不到Express模块

Kel*_*elp 47 javascript node.js npm express

当我尝试运行app.jsexpress创建的文件时,我收到以下错误:

$ node app.js

node.js:134
        throw e; // process.nextTick error, or 'error' event on first tick
        ^
Error: Cannot find module 'express'
    at Function._resolveFilename (module.js:320:11)
Run Code Online (Sandbox Code Playgroud)

当我输入时,express --version我得到一个返回声明2.3.3.我使用npm来安装express.我不得不使用这些说明手动创建npm:

git clone http://github.com/isaacs/npm.git
cd npm
sudo make install
Run Code Online (Sandbox Code Playgroud)

错误是Error: Cannot find module 'express'.

在安装npm和express之后我是否需要做一些事情才能使快递看到由npm创建的模块?

  • 我的节点是版本:0.4.6
  • 我的快递是版本:2.3.3
  • 我的npm是版本:1.0.6

Express全局安装.我用-g旗帜来安装它.


编辑:当我尝试时,"node -e require.paths"我得到:

[ '/home/user/.node_modules',
  '/home/user/.node_libraries',
  '/usr/local/lib/node' ]
Run Code Online (Sandbox Code Playgroud)

因此,节点未检测到npm安装.如何让节点检测npm安装?

jus*_*ude 68

  • 安装快递

    npm install -g express

  • 创建一个新的应用程序

    express your_app

  • 进入app目录

    cd your_app

  • 使用npm链接来解析模块

    npm link express

  • 是的,窗户的喜悦:) (11认同)

isa*_*acs 27

对require()使用本地安装,对命令行应用程序使用全局安装.

如果您需要两者,请使用该npm link命令.


ezr*_*tre 20

在Ubuntu 12.04上,您必须将export NODE_PATH=/usr/local/lib/node_modules您的/.bashrc 添加到全局安装的模块中.

  • 我的情况是`export NODE_PATH ="/ usr/lib/node_modules"`因为我使用的是不同于Ubuntu存储库的节点.但你在这里是一个好的(或最好的)anwser. (3认同)

Rob*_*sch 15

看来,虽然npm已经更新以安装全局模块/usr/local/lib/node_modules,但Node自己require.paths还没有反映出这种变化.

有两种合理的解决方案:

  1. 将以下代码添加到应用程序的顶部:

    require.paths.push('/usr/local/lib/node_modules');
    
    Run Code Online (Sandbox Code Playgroud)
    • 亲:非侵入性,易于添加

    • Con:需要纪律,未来版本的节点限制访问require.paths

  2. 以root身份执行:

    ln -s /usr/local/lib/node_modules /usr/local/lib/node
    
    Run Code Online (Sandbox Code Playgroud)
    • 亲:合理的非侵入性

    • Con:需要root,修改linux fs,可能无法在系统更新中存活


小智 8

我有同样的问题.这虽然对我有用:

好像是npm(现在?)安装节点模块/usr/local/lib/node_modules/而不是/usr/local/lib/node/

我所做的只是将所有内容从node_modules复制到节点:sudo cp -r /usr/local/lib/node_modules/* usr/local/lib/node/现在它似乎对我有用.

希望这可以帮助你:-)

  • 不,不要这样做!这么难看! (40认同)
  • 这种方法的问题是,每次使用npm安装时,都需要将/ usr/local/lib/node_modules中的任何新模块复制到/ usr/local/lib/node. (5认同)
  • 这是非常令人讨厌但我刚刚创建了一个符号链接`ln -s/usr/local/lib/node_modules/usr/local/lib/node`.它有点清洁. (4认同)

Pie*_*mon 6

怎么样NODE_PATH=/usr/local/lib/node_modules的.bashrc.bash_profile中?我认为这是真正正确的方法.