我正在Windows上学习nodejs。使用npm.cmd全局安装了几个模块,nodejs无法找到已安装的模块。以玉为例,
npm install jade -g
Jade安装在目录"C:\Program Files (x86)\nodejs\node_modules"
中,但以下代码将失败并出现"Cannot find module 'jade'"
错误,
var jade = require('jade');
但是,当本地安装jade时,代码将成功运行(在npm中没有-g选项)。我不想使用本地安装的模块,这对我来说是浪费磁盘空间。如何使全局安装的模块在Windows上运行?
添加一个名为NODE_PATH
的环境变量,并将其设置为%USERPROFILE%\Application Data\npm\node_modules
(Windows XP),%AppData%\npm\node_modules
(Windows 7/8/10),或者在npm最终安装Windows风格的模块的地方。要一劳永逸地完成它,在系统属性对话框的高级选项卡中添加它作为系统变量(运行control.exe sysdm.cpl,System,3
)。
Windows 7+中的快速解决方案就是运行:
rem for future
setx NODE_PATH %AppData%\npm\node_modules
rem for current session
set NODE_PATH=%AppData%\npm\node_modules
值得一提的是,NODE_PATH
仅在导入Node应用程序中的模块时使用。如果要在CLI中使用全局安装的模块二进制文件,则还需要将其添加到PATH
,但不包含node_modules
部分(例如Windows 7/8/10中的%AppData%\npm
)。
老故事
我对node.js自己也很陌生,所以我可能不完全正确,但根据我的经验,它的工作原理如下:
有关详细信息,请参阅类似问题:How do I install a module globally using npm?
从我对win8.1的经验来看,npm在C:\Users\[UserName]\AppData\Roaming\npm\node_modules
上安装模块,但是在C:\Users\[UserName]\node_modules
上搜索它们。
一个简单的解决方案参考模块应用于完整路径:
var jsonminify = require("C:/Users/Saulius/AppData/Roaming/npm/node_modules/jsonminify");
对于windows,每个人都说你应该为nodejs和npm模块设置环境变量,但是你知道为什么吗?对于某些模块,他们有命令行工具,安装完模块后,在C:\ Program Files \ nodejs中有[module] .cmd文件,它用于在window命令中启动。因此,如果不将包含cmd文件的路径添加到环境变量%PATH%,则不会通过命令窗口成功启动它们。
或者你可以添加到~/.npmrc
右prefix。我有64 Win7的C:\Program Files\nodejs
。
我偶然发现了这个问题,因为我想在带有Windows 10的新计算机上使用带有visual studio 2015的node.js。我在Windows 7和8和8.1上使用了node.js。从来没有问题node.js找到一个模块。我使用遗留node.js 0.10.39,因为我必须使用此版本,因为串行和RFXCOM模块。
Windows 10的答案是使用C:\ Users \ User \ node_modules在环境变量中设置NODE_PATH。
对于Windows 10,我必须在文件夹中本地安装gulp:
C:\用户\我的账户\应用程序数据\漫游\故宫\ node_modules
npm install gulp
这解决了我的“gulp未被识别”的问题
只需从this下载并重新安装该节点,这将解决所有路径问题。
不要忘记重新启动命令提示符或终端。
如果您使用的是Windows,则需要一些步骤,1)创建一个名为package.json的文件
{
"name": "hello"
, "version": "0.0.1"
, "dependencies": {
"express": "*"
}
}
其中hello是包的名称,*表示依赖项的最新版本
2)代码到项目目录并运行以下命令
npm安装
它安装依赖项
如果你在windows7平台上,也许你应该像这样改变NODE_PATH:%AppData%\npm\node_modules
我知道我可以唤醒一个僵尸,但我认为这仍然是一个问题,如果您需要在Windows 7上全局访问节点模块,您需要将其添加到您的全局变量路径:
C:\Users\{USER}\AppData\Roaming\npm
重要的是:只有这个没有node_modules
部分,花了我半小时看到这个。
为了使它在Windows 10上工作,我通过将文件夹%USERPROFILE%\AppData\Roaming\npm
添加到我的PATH来解决它。像这样附加\node_modules
:%USERPROFILE%\AppData\Roaming\npm\node_modules\
不适合我。
我只想引用这个节点的blog post ......
一般来说,经验法则是:
- 如果您要在程序中安装要使用的东西,请使用require('whatever'),然后在项目的根目录下在本地安装。
- 如果您要在shell中安装要在shell中使用的东西,请在命令行或其他东西上安装它,以便全局安装它,以便它的二进制文件最终位于PATH环境变量中。
...
当然,在某些情况下,您希望同时执行这两项操作。 Coffee-script和Express都是具有命令行界面的应用程序以及库的良好示例。在这些情况下,您可以执行以下操作之一:
- 在两个地方安装它。说真的,你的磁盘空间不足吗?这很好,真的。它们是一个很小的JavaScript程序。
- 全局安装,然后npm link coffee-script或npm link express(如果你在支持符号链接的平台上。)那么你只需要更新全局副本来更新所有的符号链接。
要缩短它,请在app目录中使用npm link jade
。
试图添加/编辑环境变量,并得出结论:
User variables
(上方框)而不是System variables
(下方);否则你必须“以管理员身份运行”才能使其正常运行。;%AppData%\npm
附加到Path
以将其用作命令行工具(如果支持,如jshint
和grunt-cli
)。NODE_PATH
并将其设置为%AppData%\npm\node_modules
以便在脚本中使用require('<pkg_name>')
而无需将其安装在项目目录中。 (但是如果你正在使用像npm link
is suggested这样的操作系统,比如Vista和更新版本的mklink
。)测试环境:
我有一个糟糕的时间让全球模块工作。最后,我明确地将C:\Users\yourusername\AppData\Roaming\npm
添加到系统变量下的PATH变量中。我还需要将此变量放在列表中的nodejs path变量之前。
我正在运行Windows 10。
我在Windows 7上遇到了这个问题,正在运行
npm install -g gulp
以普通用户身份登录时作为管理员。
解决方案:当执行与普通用户相同的安装(而不是“以管理员身份运行”为cmd)时,一切都很好。我想这与默认安装和搜索路径有关。