运行npm install cordova时,npm install无法正常工作

10

我正在使用Ionic框架构建混合应用程序。根据官方网站,我需要获取Node.js的4.2.4版本,其中包括npm软件包管理器。Ionic所需的依赖项之一是cordova,因此我运行以下命令来获取它。

C:\Users\ferrero>npm install -g cordova

之后,控制台记录日志

npm info it worked if it ends with ok
npm verb cli [ 'C:\\Program Files\\nodejs\\node.exe',
npm verb cli   'C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js',
npm verb cli   'prefix',
npm verb cli   '-g' ]
npm info using npm@2.14.12
npm info using node@v4.2.4
npm verb exit [ 0, true ]
npm info ok
npm info it worked if it ends with ok
npm verb cli [ 'C:\\Program Files\\nodejs\\node.exe',
npm verb cli   'C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-  cli.js',
npm verb cli   'install',
npm verb cli   'cordova' ]
npm info using npm@2.14.12
npm info using node@v4.2.4
npm verb config Skipping project config: C:\Users\ferrero/.npmrc.
(matches userconfig)
npm verb install initial load of C:\Users\ferrero\package.json
npm verb readDependencies loading dependencies from C:\Users\ferrero\package.json
npm verb cache add spec cordova
npm verb addNamed "latest" is being treated as a dist-tag for cordova
npm info addNameTag [ 'cordova', 'latest' ]
npm verb addNameTag registry:https://registry.npmjs.org/cordova not in flight; fetching
npm verb request uri https://registry.npmjs.org/cordova
npm verb request no auth needed
npm info attempt registry request try #1 at 16:47:06
npm verb request id 62f85abc5c5b7cd5
npm verb etag "6KQ69KRX02Y8MUJFT56H9DE6N"
npm http request GET https://registry.npmjs.org/cordova
npm info retry will retry, error on last attempt: Error: self signed certificate in certificate chain

从日志中可以看出,npm运行的版本是2.14.12,并且它抱怨问题是自签名证书 - 可能是由https://registry.npmjs.org/cordova发行。为了解决这个问题,我运行了

npm config set registry=http://registry.npmjs.org

接着,之后的部分(只包括相关内容)

C:\Users\ferrero>npm install -g cordova

npm verb cache add spec cordova
npm verb addNamed "latest" is being treated as a dist-tag for cordova
npm info addNameTag [ 'cordova', 'latest' ]
npm verb addNameTag registry:http://registry.npmjs.org/cordova not in flight; fetching
npm verb request uri http://registry.npmjs.org/cordova
npm verb request no auth needed
npm info attempt registry request try #1 at 16:59:34
npm verb request id 359f93cb3aa8b76e
npm verb etag "6KQ69KRX02Y8MUJFT56H9DE6N"
npm http request GET http://registry.npmjs.org/cordova
npm http 304 http://registry.npmjs.org/cordova
npm verb headers { 
    date: 'Tue, 26 Jan 2016 18:59:34 GMT', 
    npm verb headers   via: '1.1 varnish', 
    npm verb headers   'cache-control': 'max-age=300', 
    npm verb headers   etag: '"6KQ69KRX02Y8MUJFT56H9DE6N"',
    npm verb headers   age: '263',
    npm verb headers   connection: 'keep-alive',
    npm verb headers   'x-served-by': 'cache-atl6230-ATL',
    npm verb headers   'x-cache': 'HIT',
    npm verb headers   'x-cache-hits': '1',
    npm verb headers   'x-timer': 'S1453834774.362657,VS0,VE1',
    npm verb headers   vary: 'Accept' 
}
npm verb etag http://registry.npmjs.org/cordova from cache
npm verb get saving cordova to C:\Users\ferrero\AppData\Roaming\npm-cache\registry.npmjs.org\cordova\.cache.json
npm verb addNamed "5.4.1" is a plain semver version for cordova
npm verb addRemoteTarball http://registry.npmjs.org/cordova/-/cordova-5.4.1.tgz
not in flight; adding
npm verb addRemoteTarball [ 'http://registry.npmjs.org/cordova/-/cordova-5.4.1.tgz',
npm verb addRemoteTarball   'bc56bc1d3c5387a7926408212dfbce59002f9d76' ]

这一次,它没有抱怨其他任何事情。相反,加载指示器 - 一个竖线字符 - 不停地运行着。那么,我应该怎么做才能下载这样的依赖项呢?


2
我不确定这是否相关,但你应该键入npm install –g cordova而不仅仅是npm install cordova。我知道最新版本的node/npm存在一些问题,但已经在cordova 5.4及以上版本中得到解决。我刚刚安装了一个全新的电脑,并安装了最新版本的node,没有任何问题安装cordova。 - QuickFix
根据Ionic的入门指南 - http://ionicframework.com/getting-started/ - 它需要Node.js 4,因为"目前不支持Node 5!"。因此,我已经下载了Node.js 4.2.4。 - Arthur Ronald
@ArthurRonald 也许可以尝试运行以下命令:npm uninstall -g cordova,然后 npm install -g npm,最后执行 npm --loglevel info install -g cordova,检查一下哪里出了问题? - heenenee
当您指定注册表时,必须设置主机而不是软件包的路径。例如npm set registry=http://registry.npmjs.org, 不包括cordova部分。 - Alexey B.
尝试清除缓存 npm cache clean 和/或以管理员身份运行CMD。 - jcesarmobile
5个回答

2

我们似乎正在看两个不同的问题。

证书错误可能是由于出站SSL代理引起的。很可能是您的雇主,在所有SSL流量出站时打开了它们。要解决问题,您需要告诉NPM这个证书是可以接受的,方法是导入使用的代理服务器的CA证书。

npm config set cafile = "/the/certificate/file.pem"

您可能还需要为npm设置代理地址:
npm config set proxy http://proxy.example.com:3128
npm config set https-proxy http://proxy.example.com:3128

根据我的研究,与Node 5.0不兼容的问题似乎已经得到解决。文档似乎只是过时了。
Cordova中的错误可能是一个问题,这可能是因为Q promises库缺少方法,而Cordova依赖于它。
在2015年11月,一位用户成功地使用Ionic和Node 5.1.0。

其他设置可以在这里找到:https://gist.github.com/erkobridee/4061363(葡萄牙语) - Arthur Ronald

2

在执行npm install -g XXX命令时,我也遇到了同样的问题,解决方法是执行npm config set strict-ssl false


0

好的,我认为关于节点4与节点5的注释是来自cordova 5.0旧版本时期的问题,当时使用node 5安装cordova存在问题。

此后,他们发布了cordova 5.4和cordova 6,其中不再存在与node 5相关的问题。

我通常不使用ionic,但为了确保,在我的新安装的node v5.4.1上,我已经运行了cordova 5.4(也使用node 5.4.1安装),我:

  • 安装cordova 6:npm install -g cordova
  • 安装ionic 1.7.13:npm install -g ionic
  • 创建一个ionic应用程序:ionic start myApp tabs
  • 在Android设备上运行应用程序

cd myApp cordova platform add android ionic run android

一切都完美地工作了。

因此,我认为您可以安全地尝试安装最新版本的node来构建ionic应用程序。 也许node 5.4.1可以解决您在node 4.2.4中遇到的问题?


0

-1

我之前也遇到过类似的问题,当时对我有用的方法是:

第一步,卸载node和npm;

第二步,在C:\Users\yourname\AppData\Roaming中删除npm和npm-cache文件夹;

最后,重新下载并安装node.js的最新版本。

虽然不确定这个方法对你是否有用,但希望能帮到你!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接