如何在全球范围内要求使用npm安装模块?

时间:2016-12-03 11:51:03

标签: javascript node.js npm read-eval-print-loop

我在全球范围内安装了some-npm-module,但在我require()时遇到错误:

$ node    
> const module = require('some-npm-module')
> import module from 'some-npm-module'

Error: Cannot find module 'some-npm-module'
    at Function.Module._resolveFilename (module.js:470:15)
    at Function.Module._load (module.js:418:25)
    at Module.require (module.js:498:17)
    at require (internal/module.js:20:19)
    at repl:1:12
    at realRunInThisContextScript (vm.js:22:35)
    at sigintHandlersWrap (vm.js:98:12)
    at ContextifyScript.Script.runInThisContext (vm.js:24:12)
    at REPLServer.defaultEval (repl.js:313:29)
    at bound (domain.js:280:14)

核心节点模块似乎没有问题。以下不会产生错误:

const http = require('http');

为什么会这样?我是否正确安装模块?

请注意,在这种情况下,我需要在终端中使用npm模块,而不是在某个项目中。

2 个答案:

答案 0 :(得分:2)

如果您打算在命令行according to the documentation上调用模块,则只应全局安装模块:

  

如果你想将它用作命令行工具,比如grunt CLI,那么你想要全局安装它。另一方面,如果您想使用Node&#39's require等依赖于您自己模块的软件包,那么您需要在本地安装。

这是因为require()没有查看全局模块目录,因此如果安装some-npm-module,它就永远不会找到npm install some-npm-module

使用function isLoggedIn (req, res, next) { if (req.isAuthenticated()) { return next(); } else { // variable holding previous path req.session.returnPath = req.path; res.redirect('/login'); } } . . . app.get('/auth/<provider>/callback', passport.authenticate(<provider>, { failureRedirect : '/login' }), function(req, res) { res.redirect(req.session.returnTo || "/"); delete req.session.returnTo; }); 在本地安装可以解决您的问题,并允许您从REPL中要求(只要您始终从相同目录运行REPL)。

答案 1 :(得分:-1)

全局安装npm模块后,要在当前项目/目录中使用它,只需链接它即可。

npm link module_name

它应该有用。