Windows 7、npm install -g react-native-cli 给出"Cannot read property 'path' of null"

Windows 7, npm install -g react-native-cli gives "Cannot read property 'path' of null"

我正在按照这里的官方文档开始 React Native 入门教程 https://facebook.github.io/react-native/docs/getting-started.html

  1. 顺利完成 choco、nodejs 和 python 的安装
  2. 在执行 npm install -g react-native-cli 时,我得到 "Cannot read property 'path' of null"(下面的完整错误)

npm install -g react-native-cli

C:\Windows\system32>npm install -g react-native-cli
npm ERR! Windows_NT 6.1.7601
npm ERR! argv "C:\Program Files\nodejs\node.exe" "C:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js" "install" "-g" "react-native-cli"
npm ERR! node v7.6.0
npm ERR! npm  v4.1.2

npm ERR! Cannot read property 'path' of null
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR!     <https://github.com/npm/npm/issues>

npm ERR! Please include the following file with any support request:
npm ERR!     C:\Windows\system32\npm-debug.log

C:\Windows\system32>

npm-debug.log

0 info it worked if it ends with ok
1 verbose cli [ 'C:\Program Files\nodejs\node.exe',
1 verbose cli   'C:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js',
1 verbose cli   'install',
1 verbose cli   '-g',
1 verbose cli   'react-native-cli' ]
2 info using npm@4.1.2
3 info using node@v7.6.0
4 silly loadCurrentTree Starting
5 silly install loadCurrentTree
6 silly install readGlobalPackageData
7 silly fetchPackageMetaData react-native-cli
8 silly fetchNamedPackageData react-native-cli
9 silly mapToRegistry name react-native-cli
10 silly mapToRegistry using default registry
11 silly mapToRegistry registry http://localhost:4873/
12 silly mapToRegistry data Result {
12 silly mapToRegistry   raw: 'react-native-cli',
12 silly mapToRegistry   scope: null,
12 silly mapToRegistry   escapedName: 'react-native-cli',
12 silly mapToRegistry   name: 'react-native-cli',
12 silly mapToRegistry   rawSpec: '',
12 silly mapToRegistry   spec: 'latest',
12 silly mapToRegistry   type: 'tag' }
13 silly mapToRegistry uri http://localhost:4873/react-native-cli
14 verbose request uri http://localhost:4873/react-native-cli
15 verbose request no auth needed
16 info attempt registry request try #1 at 4:37:49 PM
17 verbose request using bearer token for auth
18 verbose request id 91c9343245cf6325
19 http request GET http://localhost:4873/react-native-cli
20 info retry will retry, error on last attempt: Error: connect ECONNREFUSED 127.0.0.1:4873
21 info attempt registry request try #2 at 4:38:00 PM
22 verbose request using bearer token for auth
23 http request GET http://localhost:4873/react-native-cli
24 info retry will retry, error on last attempt: Error: connect ECONNREFUSED 127.0.0.1:4873
25 info attempt registry request try #3 at 4:39:01 PM
26 verbose request using bearer token for auth
27 http request GET http://localhost:4873/react-native-cli
28 silly fetchPackageMetaData Error: connect ECONNREFUSED 127.0.0.1:4873
28 silly fetchPackageMetaData     at Object.exports._errnoException (util.js:1028:11)
28 silly fetchPackageMetaData     at exports._exceptionWithHostPort (util.js:1051:20)
28 silly fetchPackageMetaData     at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1090:14)
28 silly fetchPackageMetaData  error for react-native-cli { Error: connect ECONNREFUSED 127.0.0.1:4873
28 silly fetchPackageMetaData     at Object.exports._errnoException (util.js:1028:11)
28 silly fetchPackageMetaData     at exports._exceptionWithHostPort (util.js:1051:20)
28 silly fetchPackageMetaData     at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1090:14)
28 silly fetchPackageMetaData   code: 'ECONNREFUSED',
28 silly fetchPackageMetaData   errno: 'ECONNREFUSED',
28 silly fetchPackageMetaData   syscall: 'connect',
28 silly fetchPackageMetaData   address: '127.0.0.1',
28 silly fetchPackageMetaData   port: 4873 }
29 silly rollbackFailedOptional Starting
30 verbose stack TypeError: Cannot read property 'path' of null
30 verbose stack     at Installer.rollbackFailedOptional (C:\Program Files\nodejs\node_modules\npm\lib\install.js:511:29)
30 verbose stack     at Array.<anonymous> (C:\Program Files\nodejs\node_modules\npm\node_modules\slide\lib\bind-actor.js:15:8)
30 verbose stack     at LOOP (C:\Program Files\nodejs\node_modules\npm\node_modules\slide\lib\chain.js:15:14)
30 verbose stack     at C:\Program Files\nodejs\node_modules\npm\node_modules\slide\lib\chain.js:18:7
30 verbose stack     at C:\Program Files\nodejs\node_modules\npm\lib\install.js:337:5
30 verbose stack     at Array.<anonymous> (C:\Program Files\nodejs\node_modules\npm\node_modules\slide\lib\bind-actor.js:15:8)
30 verbose stack     at LOOP (C:\Program Files\nodejs\node_modules\npm\node_modules\slide\lib\chain.js:15:14)
30 verbose stack     at chain (C:\Program Files\nodejs\node_modules\npm\node_modules\slide\lib\chain.js:20:5)
30 verbose stack     at C:\Program Files\nodejs\node_modules\npm\lib\install.js:294:5
30 verbose stack     at C:\Program Files\nodejs\node_modules\npm\node_modules\slide\lib\chain.js:16:22
31 verbose cwd C:\Windows\system32
32 error Windows_NT 6.1.7601
33 error argv "C:\Program Files\nodejs\node.exe" "C:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js" "install" "-g" "react-native-cli"
34 error node v7.6.0
35 error npm  v4.1.2
36 error Cannot read property 'path' of null
37 error If you need help, you may report this error at:
37 error     <https://github.com/npm/npm/issues>
38 verbose exit [ 1, true ]

这是我试过的,

  1. 检查了文件夹"C:\Program Files\nodejs\node_modules"的权限,发现它是只读的
  2. 转移所有权并将完全控制权分配给我自己和管理员用户,然后通过 attrib -r -s C:\Program Files\nodejs\node_modules /S /D
  3. 删除只读
  4. 当我查看文件夹的权限时,它仍然是只读的,但里面的所有文件都不受只读的控制
  5. 再次执行"npm install react-native-cli"命令,出现同样的错误

解决方案

  1. 如果您之前使用过 Sinopia 并创建了一个 .npmrc 文件,那么重命名或删除配置文件
  2. 使用npm install -g react-native-cli 成功安装lib

推理

  1. Sinopia配置文件会让npm首先在本地机器上寻找包,如果没有找到,然后去npmjs.com
  2. 获取包
  3. 我之前安装使用过Sinopia,后来卸载了,不过貌似配置文件没有删除 3.So 配置文件让 npm 在本地机器上寻找包,而本地服务器根本就没有 运行 首先说包不可用!

我认为您的 npm 路径未在环境变量中设置。请从安装 npm 的位置设置你的 npm 路径或 运行 此命令。 在 windows 中设置环境变量 1. 转到“我的电脑”中的属性。 2. 进入高级系统设置。 3.然后转到环境变量。 4.然后在PATH变量中添加npm路径。 例如C:\Users\myuser\AppData\Roaming\npm;

我认为您使用的是代理,“http://localhost:4873/”是您的代理(或者您设置了自定义注册表)吗? 如果是,你最好检查一下你的网络,确保你可以正常使用npm安装其他模块。

"Error: connect ECONNREFUSED 127.0.0.1:4873"显示无法连接到127.0.0.1:4873