不能要求全局npm模块

时间:2015-11-14 10:42:51

标签: javascript npm

我有以下问题。我用library(data.table) DT <- as.data.table(df) temp.lookup <- lookup[lookup$oldnames %in% names(DT), ] setnames(DT, old = temp.lookup$oldnames, new = temp.lookup$newnames) 安装uuid。 当我尝试运行以下代码时:

npm install -g uuid

抛出异常:

var uuid = require("uuid");
console.log(uuid.v1());

如果我使用module.js:339 throw err; ^ Error: Cannot find module 'uuid' at Function.Module._resolveFilename (module.js:337:15) at Function.Module._load (module.js:287:25) at Module.require (module.js:366:17) at require (module.js:385:17) at Object.<anonymous> (d:\CodingProjects\HTML\TestJavascript.js:16:12) at Module._compile (module.js:435:26) at Object.Module._extensions..js (module.js:442:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:311:12) at Function.Module.runMain (module.js:467:10) 在本地安装模块,它可以正常工作。 但那是为什么呢?我应该怎么做才能使我的全球包工作? 我试图从npm install uuid下载它,但如果我没有在我的项目本地安装它,我仍然会得到一个例外。

提前致谢。

2 个答案:

答案 0 :(得分:4)

原因在于npm如何安装包。

当您运行npm install -g <package>时,您告诉npm全局安装<package>。当您想要将程序包用作命令行工具时,例如Gulp

$ npm install -g gulp
$ cd path/to/project
$ gulp

但是,当您想要依赖包时,这不起作用。

要依赖包,你应该在本地安装,i。即在项目目录中。这是npm的主要优势之一:本地安装使您可以更轻松地管理依赖关系并升级它们。没有npm install标志的-g命令专用于此。当你运行

$ npm install uuid

foo目录中,创建了一个foo/node_modules目录,并在那里安装了uuid模块。之后,您可以在.js目录(或其任何子目录)中创建foo文件,从中请求uuid模块,一切都会正常工作。

对于WebStorm:从Language & Frameworks → Javascript → Libraries下载库实际上并没有下载npm包,它只是下载并安装库类型定义。类型定义有助于在代码中使用库时,WebStorm可以构建更好的自动完成功能。

答案 1 :(得分:2)

如果您想使用全局包,您只需在本地目录中创建全局包之间的链接即可。 这也称为创建符号链接(符号链接)。

所以,运行&#34; npm链接uui&#34;在本地目录中将允许您使用全局包,而无需将其下载到本地目录中。 如果您分析本地目录,您会注意到已创建(链接)文件夹,这意味着它只是指向全局包的指针。

因此,简而言之,如果您想使用全局包,那么&#34; npm link&#34;是这样做的方式。

相关问题