首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >NodeJS需要全局模块/包

NodeJS需要全局模块/包
EN

Stack Overflow用户
提问于 2013-03-26 19:49:07
回答 7查看 100.7K关注 0票数 193

我正在尝试全局安装,然后像这样使用foreverforever-monitor

npm install -g forever forever-monitor

我看到了通常的输出,以及将文件复制到全局路径的操作,但是如果我尝试require("forever");,我会得到一个错误,说找不到模块。

我正在使用最新版本的node和npm,并且我已经知道npm在全局和本地安装中所做的更改,但是我真的不希望在每个项目上都本地安装,而且我工作的平台不支持link,所以在全局安装之后npm link对我来说是不可能的。

我的问题是:为什么我不能要求一个全局安装的软件包?这是一个特性还是一个bug?还是我做错了什么?

PS:我只想说清楚:我不想在本地安装。

EN

回答 7

Stack Overflow用户

发布于 2013-03-26 22:04:44

在全局安装包之后,必须将本地项目与全局包链接起来

代码语言:javascript
复制
npm install express -g
cd ~/mynodeproject/
npm link express  

请参阅here

票数 112
EN

Stack Overflow用户

发布于 2014-03-08 06:45:20

抱歉,我可以指定全局安装的模块的硬编码路径:

代码语言:javascript
复制
var pg = require("/usr/local/lib/node_modules/pg");

这并不完美,但考虑到Unity3d试图“编译”项目目录中包含的所有javascript,我真的无法安装任何包。

票数 34
EN

Stack Overflow用户

发布于 2016-07-23 04:58:14

我知道这是一个老问题,但是当我尝试在package.jsonpreinstall脚本中使用semver进行一些版本检查时,我遇到了这个问题。因为我知道我不能依赖于安装的任何本地模块,所以我使用这个来要求全局node_modules文件夹中的semver (因为npm依赖它,我知道它就在那里):

代码语言:javascript
复制
function requireGlobal(packageName) {
  var childProcess = require('child_process');
  var path = require('path');
  var fs = require('fs');

  var globalNodeModules = childProcess.execSync('npm root -g').toString().trim();
  var packageDir = path.join(globalNodeModules, packageName);
  if (!fs.existsSync(packageDir))
    packageDir = path.join(globalNodeModules, 'npm/node_modules', packageName); //find package required by old npm

  if (!fs.existsSync(packageDir))
    throw new Error('Cannot find global module \'' + packageName + '\'');

  var packageMeta = JSON.parse(fs.readFileSync(path.join(packageDir, 'package.json')).toString());
  var main = path.join(packageDir, packageMeta.main);

  return require(main);
}

我喜欢这种方法,因为它不需要安装任何特殊的模块就可以使用。

我没有像其他人建议的那样使用NODE_PATH解决方案,因为我想让它在任何人的机器上工作,而不需要在为我的项目运行npm install之前进行额外的配置/设置。

按照这种编码方式,只能保证找到顶级模块(使用npm install -g ...安装)或npm所需的模块(此处以dependencies形式列出:https://github.com/npm/npm/blob/master/package.json)。如果您使用的是较新版本的NPM,它可能会找到其他全局安装的包的依赖项,因为现在node_modules文件夹的结构更扁平了。

希望这对某些人有用。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15636367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档