我写了一个模块,我刚刚发布到npm(https://npmjs.org/package/wisp)
所以从命令行安装好:
$ npm i -g wisp
但是,当我从命令行运行它时,我一直收到一个错误,即没有安装optimist:
$ wisp
Error: Cannot find module 'optimist'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Module.require (module.js:362:17)
at require (module.js:378:17)
at Object.<anonymous> (/usr/local/lib/node_modules/wisp/wisp:12:10)
at Object.<anonymous> (/usr/local/lib/node_modules/wisp/wisp:96:4)
at Module._compile (module.js:449:26)
at Object.exports.run (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/coffee-script.js:68:25)
at compileScript (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/command.js:135:29)
at fs.stat.notSources.(anonymous function) (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/command.js:110:18)
但是,我已在package.json中指定为依赖:
{
"name": "wisp",
"author": "Brendan Scarvell <bscarvell@gmail.com>",
"version": "0.1.0",
"description": "Global nodejs file server",
"dependencies": {
"optimist": "~0.3.4"
},
"repository": "git://github.com/tehlulz/wisp",
"bin": {
"wisp" : "./wisp"
}
}
有谁知道如何让它运行?我知道它与bin部分有关,将可执行文件添加到bin并且该目录中的node_modules为空。不知道如何解决这个问题。
答案 0 :(得分:335)
对于遇到此问题的其他人,由于npm
安装到我NODE_PATH
以外的位置,我遇到了此问题。
[root@uberneek ~]# which npm
/opt/bin/npm
[root@uberneek ~]# which node
/opt/bin/node
[root@uberneek ~]# echo $NODE_PATH
我的NODE_PATH为空,正在运行npm install --global --verbose promised-io
表明它已安装到/opt/lib/node_modules/promised-io
中:
[root@uberneek ~]# npm install --global --verbose promised-io
npm info it worked if it ends with ok
npm verb cli [ '/opt/bin/node',
npm verb cli '/opt/bin/npm',
npm verb cli 'install',
npm verb cli '--global',
npm verb cli '--verbose',
npm verb cli 'promised-io' ]
npm info using npm@1.1.45
npm info using node@v0.8.4
[cut]
npm info build /opt/lib/node_modules/promised-io
npm verb from cache /opt/lib/node_modules/promised-io/package.json
npm verb linkStuff [ true, '/opt/lib/node_modules', true, '/opt/lib/node_modules' ]
[cut]
我的脚本在require('promised-io/promise')
上失败了:
[neek@uberneek project]$ node buildscripts/stringsmerge.js
module.js:340
throw err;
^
Error: Cannot find module 'promised-io/promise'
at Function.Module._resolveFilename (module.js:338:15)
我可能使用configure --prefix=/opt
从源安装了node和npm。我不知道为什么这使他们无法找到已安装的模块。现在的解决方法是将NODE_PATH指向正确的目录:
export NODE_PATH=/opt/lib/node_modules
我的require('promised-io/promise')
现在成功了。
答案 1 :(得分:32)
将此添加到prog(mac)的开头:
module.paths.push('/usr/local/lib/node_modules');
答案 2 :(得分:14)
默认情况下,节点不会在/ usr / local / lib / node_module中查看加载全局模块。 请参阅http://nodejs.org/api/modules.html#modules_loading_from_the_global_folders
中说明的模块加载所以要么你必须这样做 1)将/ usr / local / lib / node_module添加到NODE_PATH并导出它 要么 2)将已安装的节点模块复制到/ usr / local / lib / node。 (如加载模块节点的链接中所述,将在此路径中搜索并将起作用)
答案 3 :(得分:10)
对于某些人(比如我),没有其他工作,请试试这个:
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.context.annotation.Configuration;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* Created by dustin.schultz on 12/14/15.
*/
@SpringApplicationConfiguration(classes = FooBar.TestApplication.class)
@RunWith(SpringJUnit4ClassRunner.class)
@TestPropertySource(properties = { "foo=${random.value}", "bar=${foo}" })
public class FooBar
{
@Value("${foo}")
private String foo;
@Value("${bar}")
private String bar;
@Test
public void foo()
{
assertThat(foo, is(bar));
}
@Configuration
@EnableAutoConfiguration
public static class TestApplication
{
}
}
希望它可以帮助某人:)
答案 4 :(得分:8)
我得到了&#34;乐观主义者&#34;模块错误,我刚刚做了#34; npm install&#34;解决它。过了那个错误。
答案 5 :(得分:5)
request-promise
我遇到了这个问题。在我的情况下,替换:
npm install request-promise --global
带
npm install request-promise --cli
工作(source)
另外,尝试设置环境变量
NODE_PATH=%AppData%\npm\node_modules
答案 6 :(得分:3)
$ vim /etc/profile.d/nodejs.sh
NODE_PATH=/usr/lib/nodejs:/usr/lib/node_modules:/usr/share/javascript
export NODE_PATH="$NODE_PATH"
答案 7 :(得分:1)
在我的情况下,node
和npm
都在同一路径(/usr/bin
)。 NODE_PATH
为空,因此npm
将全局模块放入/usr/lib/node_modules
require(...)
成功找到它们。
唯一的例外是npm
模块,它随nodejs包一起提供。由于我使用的是64位系统,因此它被放入/usr/lib64/node_modules
。如果空NODE_PATH
并且节点从/usr/bin
开始,则不需要(...)搜索。所以我有两个选择:
/usr/lib64/node_modules/npm
与/usr/lib/node_modules/npm
/usr/lib/node_modules/*
移至/usr/lib64/node_modules/
并设置NODE_PATH=/usr/lib64/node_modules
两者都有效。我使用OpenSUSE 42.1和更新存储库中的nodejs包。版本是4.4.5。
答案 8 :(得分:1)
对于Mac用户,最好使用手动安装:
为了最大限度地减少权限错误的可能性,您可以将npm配置为 使用不同的目录。在这个例子中,它将是一个隐藏的 您的主文件夹上的目录。
在开始之前备份计算机。
为全局安装创建目录:
mkdir~ / .npm-global
配置npm以使用新目录路径:
npm config set prefix&#39;〜/ .npm-global&#39;
打开或创建〜/ .profile文件并添加以下行:
export PATH =〜/ .npm-global / bin:$ PATH
返回命令行,更新系统变量:
source~ / .profile
- 醇>
测试:全局下载包而不使用sudo。
npm install -g jshint
代替步骤2-4,您可以使用相应的ENV变量(例如 如果你不想修改〜/ .profile):
id
参考:https://docs.npmjs.com/getting-started/fixing-npm-permissions
答案 9 :(得分:1)
我收到此错误Error: Cannot find module 'number-is-nan'
,而模块实际存在。这是由于Node.js安装错误/不完整。
对于Windows,正如其他答案所暗示的那样,您需要一个干净的Node installation:
npm
npm_cache
和C:\Users\user\AppData\Roaming
npm init
或(default config){/ 1}} npm init --yes
设置Windows环境变量。此路径是安装软件包的位置。它可能类似于NODE_PATH
NODE_PATH = C:\Users\user\node_modules or C:\Users\user\AppData\Roaming\npm\node_modules
应该可以正常工作注意:
在重新安装Node.js之前尝试最后几点,它可以节省您一些时间并避免重新安装所有软件包。
答案 10 :(得分:1)
我这样做的方式很简单......
npm install --global --verbose protractor
对我来说很好。
希望这可以帮助你......
答案 11 :(得分:1)
对于Windows,来自Nodejs cannot find installed module on Windows?对我有用的是运行npm链接,如
npm link wisp
答案 12 :(得分:1)
在Windows上,如果你刚刚进行了全新安装而你得到了这个,你需要在\ AppData \ Roaming
中吹掉你的npm缓存答案 13 :(得分:1)
在Ubuntu
下运行root
的其中一个测试服务器上遇到同样的问题。然后使用useradd -m myuser
和installed everything(nvm
,node
,包)创建了一个新用户myuser
。现在它工作正常。
答案 14 :(得分:0)
我遇到与OP相同的错误,但是我可以看到日志sh: node: command not found
。
事实证明/ usr / bin / node程序(符号链接)不再与apt install nodejs
一起安装。符号链接/usr/bin/node' to
nodejs ,
npm install -g @ angular / cli`成功。
在debian上安装它的正确方法是apt install nodejs-legacy
。
答案 15 :(得分:0)
我必须将C:\ Users \ {Username} \ AppData \ Roaming \ npm添加到我的env变量中,然后我才能安装东西。
答案 16 :(得分:0)
我刚刚遇到了axios
模块的问题。
然后,我尝试了这一点:运行rm -rf node_modules
和yarn
。
而且有效。