发布NPM包的开发版本

15

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

我尝试在package.json文件的version字段中设置"dev",但当我尝试发布时,出现了错误:

$ 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

哪些是最接近的替代品?


3
你可以发布 1.0.0-dev - Machado
2个回答

38
你可以将预发布标签上传到npm。这些标签不会被普通的semver范围语义所匹配,但是它们允许你使用和上传开发版本。一个例子是1.3.5-alpha.3。如果你要上传还没有版本的东西,那么一个合理的用法是0.0.1-alpha.1

哦,那听起来不错,实际上我以前也这样做过,但是在npm publish这样的版本之后,npm install会安装稳定版本(而不是alpha版本?) - Ionică Bizău
是的。使用alpha版本的唯一方法是在安装时指定alpha标签。 - yincrash
明白了,接受的答案 - 更好和实际预期的行为。 :) - Ionică Bizău

10

NPM包版本必须符合semver要求。

普通版本号必须采用X.Y.Z的形式,其中X、Y和Z是非负整数,且不能包含前导零。X是主版本号,Y是次版本号,Z是补丁版本号。每个元素必须按数字递增。例如:1.9.0->1.10.0->1.11.0。

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

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

示例:

假设您正在开发的模块名为foo,并且您想在模块bar中进行测试,脚本文件为bar/index.js。假设这两个模块目录位于同一个父目录中。您可以按照以下步骤操作,而不是将未完成的模块foo发布到npm并在模块bar中安装它:
var foo = require('../foo')

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

npm install <git remote url>

NPM安装文档提供了更多关于该安装方法的详细信息(选项g)。

或者您可以使用本帖中提出的方法:在不发布到npmjs.org的情况下本地测试npm模块

编辑

还有另一种替代方案,需要使用npm link 命令

  • 在您开发的模块内执行npm link命令。这将从prefix/package-name创建全局安装的符号链接到当前文件夹
  • 另一步是在其他位置(用于测试开发模块的其他模块/应用程序)中执行npm link package-name(其中package-name是您开发的包的名称)。这将在本地node_modules文件夹中创建指向全局符号链接的符号链接(第一步创建的)。
请注意,在某些操作系统中,您可能需要以特权用户身份运行第一个命令(通常使用sudo)。
使用符号链接,您将能够向已开发的模块添加更改,并立即在其他链接模块中查看其结果。
我希望这能帮助到您。

嘿,你能否更新一下你的回答,指出 npm install 命令支持 git 仓库 URL,这样开发版本就可以被安装了?例如:npm install git://github.com/user/repo.git - Ionică Bizău
@IonicãBizãu,感谢您的建议;非常方便的选项! - Tom
到目前为止,对我来说,使用npm pack选项是最好的选择。少一些繁琐的操作,减少额外的负担,避免发布代码,速度非常快。 - undefined

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