发布NPM包的开发版本

时间:2014-01-25 19:56:22

标签: node.js npm

如何发布NPM包的开发版本?

我尝试在"dev"中为version字段设置package.json值,但发布时出错:

$ npm publish
npm ERR! Error: Invalid version: "dev"
npm ERR!     at Object.module.exports.fixVersionField (/usr/lib/node_modules/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/fixer.js:180:13)
npm ERR!     at /usr/lib/node_modules/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/normalize.js:29:38
npm ERR!     at Array.forEach (native)
npm ERR!     at normalize (/usr/lib/node_modules/npm/node_modules/read-package-json/node_modules/normalize-package-data/lib/normalize.js:28:15)
npm ERR!     at final (/usr/lib/node_modules/npm/node_modules/read-package-json/read-json.js:310:33)
npm ERR!     at then (/usr/lib/node_modules/npm/node_modules/read-package-json/read-json.js:124:33)
npm ERR!     at /usr/lib/node_modules/npm/node_modules/read-package-json/read-json.js:299:40
npm ERR!     at fs.js:266:14
npm ERR!     at /usr/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:103:5
npm ERR!     at Object.oncomplete (fs.js:107:15)
npm ERR! If you need help, you may report this *entire* log,
npm ERR! including the npm and node versions, at:
npm ERR!     <http://github.com/isaacs/npm/issues>

npm ERR! System Linux 3.11.0-15-generic
npm ERR! command "node" "/usr/bin/npm" "publish"
npm ERR! cwd /home/ionicabizau/package-name
npm ERR! node -v v0.10.24
npm ERR! npm -v 1.3.23
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /home/ionicabizau/package-name/npm-debug.log
npm ERR! not ok code 0

哪个是最接近的选择?

2 个答案:

答案 0 :(得分:17)

你可以upload prerelease tags to npm。这些标签不会与正常的semver范围语义匹配,但允许您使用和上传开发版本。一个例子是1.3.5-alpha.3。如果您正在上传尚无版本的内容,那么合理使用就像0.0.1-alpha.1

答案 1 :(得分:6)

NPM包版本必须符合semver

的要求
  

普通版本号必须采用X.Y.Z形式,其中X,Y和Z为   非负整数,并且不得包含前导零。 X是   主要版本,Y是次要版本,Z是补丁版本。   每个元素必须在数值上增加。例如:1.9.0 - &gt; 1.10.0    - &GT; 1.11.0。

因此不允许使用dev作为版本号。

此外,不建议发布任何处于开发状态的代码。如果要在不同模块中测试模块,可以使用相对路径或使用git远程URL包含该模块。

示例:

假设您正在开发的模块名为foo,并且您希望在模块bar中测试它,脚本文件bar/index.js。假设两个模块目录都在同一个父目录中。您可以执行以下操作,而不是将未完成的模块foo发布到npm并将其安装在模块bar中,您可以执行以下操作:

var foo = require('../foo')

正如Ionicã Bizãu(下面的评论)所建议的那样,您也可以使用带有git远程URL的npm install,例如。

npm install <git remote url>

NPM install documentation提供有关该安装方法的更多详细信息(选项g)。

或者,您可以使用此帖中提议的方法:Locally test your npm modules without publishing them to npmjs.org

修改

还有另一种替代解决方案需要npm link command

  • 在已开发的模块中执行npm link命令。这将创建从prefix/package-name到当前文件夹
  • 的全局安装的符号链接
  • 另一个步骤是在其他位置(用于测试已开发模块的其他模块/应用程序)执行npm link package-name(其中package-name是您开发的软件包的名称)。这将创建一个从本地node_modules文件夹到全局符号链接(在第一步中创建)的符号链接。

请注意,您可能需要在某些操作系统中以特权用户身份运行第一个命令(通常sudo帮助)。

使用符号链接,您可以将更改添加到已开发的模块,并立即在其他链接的模块中查看其结果。

我希望这会有所帮助。