在Openshift Node.js项目中,npm安装错误

3

当部署一个依赖于 browserify 4.0.0 的 OpenShift Node.js 项目时,我遇到了安装 browserify 依赖的错误。具体地说:

...
remote: npm ERR! Error: No compatible version found: stream-browserify@'^1.0.0'
remote: npm ERR! Valid install targets:
remote: npm ERR! ["0.0.0","0.0.1","0.0.2","0.0.3","0.0.4","0.1.0","0.1.1","0.1.2","0.1.3","1.0.0"]
...

鉴于stream-browserify的版本根据browserify的依赖为^1.0.0,并且openshift建议1.0.0是有效的安装目标,为什么会失败?我在其他情况下也看到过这个错误,每当最高可用的openshift版本符合插入的package.json版本时。

我是否误解了插入符的含义?这是OpenShift的错误吗?

我的package.json:

{
  "name": "SampleApp",
  "version": "1.0.0",
  "description": "do things online",
  "keywords": [
    "OpenShift",
    "Node.js",
    "application",
    "openshift"
  ],
  "author": {
    "name": "J",
    "email": "j@email.com",
    "url": ""
  },
  "homepage": "http://www.openshift.com/",
  "repository": {
    "type": "git",
    "url": "https://github.com/openshift/origin-server"
  },
  "engines": {
    "node": "0.x",
    "npm": "1.x"
  },
  "dependencies": {
    "body-parser": "1.x",
    "browserify": "4.0.0",
    "cookie-parser": "1.x",
    "cookie-session": "1.x",
    "express": "4.x",
    "fast-csv": "0.x",
    "multer": "0.0.5",
    "pg": "3.x",
    "sql": "0.x",
    "xlsx-extract": "0.0.4"
  },
  "devDependencies": {
  },
  "bundleDependencies": [],
  "private": true,
  "main": "server.js",
  "scripts": {
    "build-js": "browserify public/index.js -o public/index-bundle.js & browserify public/intake.js -o public/intake-bundle.js",
    "start": "npm run build-js && node server.js"
  }
}

你能发布你的 package.json 文件吗? - Ben
^ 是合法的,它表示与该版本兼容。你正在使用哪个版本的nodejs和npm? - jeremy
1个回答

3
这种行为可能是由于您本地计算机和OpenShift环境上的Node和npm版本不同造成的。首先要修复package.json中的"engines"属性,类似下面的内容:
"engines": {
    "node": ">= 0.10",
    "npm": ">= 1.4"
  }

如果问题仍然存在(在openshift上),那是因为openshift环境中缺少所需的nodejs/npm版本。例如,截至今天,在我的本地机器上,我可能正在使用node版本0.10.28和npm版本1.4.9,但在openshift nodejs默认cartridge上,我必须满足于nodejs版本0.10.5和npm版本1.2.17,这是一个很大的差距。
因此,在这种情况下,最简单的方法是使用“npm shrinkwrap”,它会冻结应该使用的嵌套依赖项版本,从而消除了npm版本的不同行为来确定要安装的嵌套依赖项。
可以在这里阅读有关shrinkwrap的信息:https://www.npmjs.org/doc/cli/npm-shrinkwrap.html 因此,在您的本地机器上:
1. 运行“npm install”并确保一切正常。 2. 运行“npm shrinkwrap”。这将创建一个文件 - “npm-shrinkwrap.json”,其中包含所需的shrinkwrap信息。添加,提交并推送该文件到openshift git存储库。

问题确实是在openshift上使用的node/npm版本过旧。旧版本无法识别插入符号(^1.0.0)。上述解决方案可行,尽管我选择了稍微不同的解决方案,即使用x符号(1.0.x)。 - Jag

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