Node.js 与Travis CI一起发布到npm

Node.js 与Travis CI一起发布到npm,node.js,npm,travis-ci,Node.js,Npm,Travis Ci,如何使用Travis CI向npm发布?我试过以下方法。travis.yml: language: nodejs node_js: - '6' - '6.1' - '5.11' before_script: - npm install -g nodeunit script: nodeunit deploy: provider: npm email: my_email api_key: "encrypted" 但当涉及到npm位时,我得到: npm ERR! publish Fail

如何使用Travis CI向npm发布?我试过以下方法。travis.yml:

language: nodejs
node_js:
- '6'
- '6.1'
- '5.11'
before_script:
- npm install -g nodeunit
script: nodeunit
deploy:
  provider: npm
  email: my_email
  api_key: "encrypted"
但当涉及到npm位时,我得到:

npm ERR! publish Failed PUT 400
npm ERR! Error: Not found : package-name
有什么想法吗

更新

我得到另一个错误:

NPM API key format changed recently. If your deployment fails, check your
API key in ~/.npmrc.
http://docs.travis-ci.com/user/deployment/npm/
~/.npmrc size: 53
env: <this is my unencrypted api key>: No such file or directory

现在它工作了

有些事情可能会出问题。首先,您是否检查了您的
package.json
并确保有
name
属性?或者名称是否与现有npm包冲突?错误消息表明那里有问题

但还有另一个问题。您的API密钥似乎是字符串literal
“encrypted”
,除非您只是将其用作本例的占位符。它应该是这样的:

provider: npm
email: my.email@gmail.com
api_key:
  secure: "Esiel6Dws/vjwNshQ/nmx43+7/lpqsl8Dkd ..."
skip_cleanup: true
还要注意
skip_cleanup
属性。如果您想发布构建的任何工件,您应该包括以下内容

可以使用进行加密。请参见和命令

有关工作示例,请参见GitHub上项目的my file on

最后,确保您的API密钥是正确的。在登录到npm的计算机上,检查
~/.npmrc
文件

nano ~/.npmrc

然后找到以
//registry.npmjs.org/:\u authToken=
开头的行。确保将此令牌用作
.travis.yml
中的API密钥。只要您在该计算机上登录到npm,该令牌将一直有效。

可能会出现一些问题。首先,您是否检查了您的
package.json
并确保有
name
属性?或者名称是否与现有npm包冲突?错误消息表明那里有问题

但还有另一个问题。您的API密钥似乎是字符串literal
“encrypted”
,除非您只是将其用作本例的占位符。它应该是这样的:

provider: npm
email: my.email@gmail.com
api_key:
  secure: "Esiel6Dws/vjwNshQ/nmx43+7/lpqsl8Dkd ..."
skip_cleanup: true
还要注意
skip_cleanup
属性。如果您想发布构建的任何工件,您应该包括以下内容

可以使用进行加密。请参见和命令

有关工作示例,请参见GitHub上项目的my file on

最后,确保您的API密钥是正确的。在登录到npm的计算机上,检查
~/.npmrc
文件

nano ~/.npmrc

然后找到以
//registry.npmjs.org/:\u authToken=
开头的行。确保将此令牌用作
.travis.yml
中的API密钥。只要您在该计算机上登录到npm,该令牌将一直有效。

我看到您已解决问题,但我想分享我的工作解决方案:

首先,我生成了一个npm令牌。 简单地说,我已经在我的电脑上用
npm login
登录到npm,然后用
cat~/.npmrc
获取它

然后我向travis添加了一个Environment变量:

最后,我添加到
.travis.yml

deploy:
  provider: npm
  email: my-email@provider.com
  api_key: $NPM_TOKEN
  on:
    tags: true

只有在构建成功并且将任何标记添加到git存储库时,才会将其发布到npm存储库中(因此您只能在需要时发布)。

我看到您已经解决了问题,但我想分享我的工作解决方案:

首先,我生成了一个npm令牌。 简单地说,我已经在我的电脑上用
npm login
登录到npm,然后用
cat~/.npmrc
获取它

然后我向travis添加了一个Environment变量:

最后,我添加到
.travis.yml

deploy:
  provider: npm
  email: my-email@provider.com
  api_key: $NPM_TOKEN
  on:
    tags: true

只有在构建成功并且将任何标记添加到git存储库时,才会将其发布到npm存储库(因此您只能在需要时发布)。

该包已经手动发布,我只是尝试使用travis自动更新它。还有,钥匙和电子邮件都是对的,我只是把它们占了个位置。如果尝试添加secure,请查看发生了什么与手动添加
secure
不同,我建议只使用Travis CLI加密您的密钥,这将为您做到这一点
travis encrypt$API_KEY——添加deploy.API_KEY
,另一种可能是存在版本冲突。你的
package.json
中的版本可能已经发布了吗?好吧,我只能继续猜测,但我认为我们正在取得进展。你是否检查了你的
~/.npmrc
,并确保你使用的API键与以
//registry.npmjs.org/:\u authToken=
开头的那一行匹配?让我们看看。包已经手动发布了,我正在尝试用travis自动更新它。还有,钥匙和电子邮件都是对的,我只是把它们占了个位置。如果尝试添加secure,请查看发生了什么与手动添加
secure
不同,我建议只使用Travis CLI加密您的密钥,这将为您做到这一点
travis encrypt$API_KEY——添加deploy.API_KEY
,另一种可能是存在版本冲突。你的
package.json
中的版本可能已经发布了吗?好吧,我只能继续猜测,但我认为我们正在取得进展。您是否检查了您的
~/.npmrc
,并确保您使用的API键与以
//registry.npmjs.org/:\u authToken=
开头的一行匹配?让我们来看看。