如何使用私人Github回购作为npm依赖

我如何列出一个私人Github回购作为"dependency"package.json?我尝试了npm的Github url语法,如ryanve/example,但在包文件夹中执行npm install会为私有依赖项给出“无法安装”错误。是否存在依赖私有回购的特殊语法(或其他机制)?

159133 次浏览

它可以通过HTTPS和oauth ssh来完成。

HTTPS和oauth: 创建访问令牌有&;scope和然后使用这种语法:

"package-name": "git+https://<github_token>:x-oauth-basic@github.com/<user>/<repo>.git"

ssh: 设置ssh,然后使用以下语法:

"package-name": "git+ssh://git@github.com:<user>/<repo>.git"

(注意在user前使用冒号而不是斜杠)

如果有人正在为Git Lab寻找其他选项,而上面的选项不起作用,那么我们还有另一个选项。对于Git Lab服务器的本地安装,我们发现下面的方法允许我们包含包依赖项。为此,我们生成并使用一个访问令牌。

$ npm install --save-dev https://git.yourdomain.com/userOrGroup/gitLabProjectName/repository/archive.tar.gz?private_token=InsertYourAccessTokenHere

当然,如果以这种方式使用访问键,它应该具有有限的权限集。

好运!

git有https格式

https://github.com/equivalent/we_demand_serverless_ruby.git

此格式接受用户名+密码

https://bot-user:xxxxxxxxxxxxxxxxxxxxxxxxxxx@github.com/equivalent/we_demand_serverless_ruby.git
所以你可以做的是创建一个新用户,将使用就像机器人一样, 只添加足够的权限,使他能够读取存储库 想要加载NPM模块,并直接在你的 packages.json < / p >
 Github > Click on Profile > Settings > Developer settings > Personal access tokens > Generate new token

在选择作用域部分,检查回购:私有存储库的完全控制

这样令牌就可以访问用户可以看到的私有回购

现在在您的组织中创建新组,将此用户添加到组中,并仅添加您所期望的存储库 (READ ONLY权限!)

你需要确保推送这个配置只向私人回购

然后您可以将此添加到您的/ packages。Json (bot-user is 用户名,XXXXXXXXX是生成的个人令牌)

// packages.json




{
// ....
"name_of_my_lib": "https://bot-user:xxxxxxxxxxxxxxxxxxxxxxxxxxx@github.com/ghuser/name_of_my_lib.git"
// ...
}

https://blog.eq8.eu/til/pull-git-private-repo-from-github-from-npm-modules-or-bundler.html

我不能让接受的答案在码头工人容器中工作。

对我有用的是在一个名为.netrc的文件中设置来自GitHub的个人访问令牌

ARG GITHUB_READ_TOKEN
RUN echo -e "machine github.com\n  login $GITHUB_READ_TOKEN" > ~/.netrc
RUN npm install --only=production --force \
&& npm cache clean --force
RUN rm ~/.netrc

package.json

"my-lib": "github:username/repo",

虽然这是一个老问题,但在这里添加一个跨平台的答案。

用于访问node_modules中的私有存储库的通用NPM v7语法是-

git+https://<token_name>:<token>@<path_to_repository>.git#<commit>

你必须用你的git服务提供者创建一个至少具有读访问权限的访问令牌。

以下是最流行的平台链接:

请注意,github创建的令牌链接到您的用户名,没有令牌名称,因此,使用您的用户名而不是token_name的github。

NPM 没有访问令牌在repo

这种方法要求使用包的任何人都使用自己的个人访问令牌进行身份验证,而不是使用单个组令牌,这允许回购不含访问令牌。你也不需要每次用户不再被授予访问权时都创建一个新的访问令牌,相反,从GitHub的repo中删除用户将自动删除他们的包访问权。

以下是GitHub NPM指南的压缩版: https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-npm-registry


发布你的GitHub回购作为一个NPM包

  1. 在开发人员设置中创建个人访问令牌:https://github.com/settings/tokens
  2. 登录NPM
npm login --scope=@<USERNAME of repo owner in lowercase> --registry=https://npm.pkg.github.com


Username: <Your personal GitHub username>
Password: <Create a GitHub Access Token with your account and paste it here>
Email: <Email associated with the same account>

例如:,用户@Bobby希望将github.com/Jessica/my-npm-package作为NPM包发布

npm login --scope=@jessica --registry=https://npm.pkg.github.com


Username: bobby
Password: yiueytiupoasdkjalgheoutpweoiru
Email: bobby@example.com
  1. 按照下面的格式更新package.json
  "name": "@jessica/my-npm-package",
"repository": "git://github.com/jessica/my-npm-package.git",
"publishConfig": {
"registry":"https://npm.pkg.github.com"
},
  1. 要发布NPM包,运行:
npm publish

在项目中安装一个私有NPM包

  1. 以与上面第2步完全相同的方式登录NPM。
  2. 使用npm install @jessica/my-npm-package安装包

完成了!

如果你的项目有需要安装这个私有NPM包的GitHub Actions脚本,请继续阅读。


GitHub操作:如何安装一个私有NPM包

在CI环境中,您还需要npm login来进行类似的身份验证。否则,npm install将失败,因为它没有访问私有NPM包的权限。预配置的一种方法是使用.npmrc文件;但是,这会将认证凭据与该文件一起提交到repo。所以,另一种方法是使用NPM工具npm-cli-login。有一个要求,你要么使用你自己的个人访问令牌(不是最优的:你离开回购,CI中断),要么为CI设置一个专门的GitHub帐户,并使用该帐户创建一个访问令牌。

  1. 使用CI-only GitHub帐户创建访问令牌,或从您自己的GitHub帐户中获取访问令牌。
  2. 在回购设置中将该访问令牌作为"secret"添加到您的回购。
  3. 更新你的GitHub Actions工作流脚本,在你安装NPM之后和运行npm install之前运行这一步:
- name: Login to GitHub private NPM registry
env:
CI_ACCESS_TOKEN: $\{\{ secrets.NAME_OF_YOUR_ACCESS_TOKEN_SECRET }}
shell: bash
run: |
npm install -g npm-cli-login
npm-cli-login -u "USERNAME" -p "${CI_ACCESS_TOKEN}" -e "EMAIL" -r "https://npm.pkg.github.com" -s "@SCOPE"
        

替换NAME_OF_YOUR_ACCESS_TOKEN_SECRETUSERNAMEEMAILSCOPE

例如

- name: Login to GitHub private NPM registry
env:
CI_ACCESS_TOKEN: $\{\{ secrets.MY_TOKEN }}
shell: bash
run: |
npm install -g npm-cli-login
npm-cli-login -u "ci-github-account" -p "${CI_ACCESS_TOKEN}" -e "ci-github-account@example.com" -r "https://npm.pkg.github.com" -s "@jessica"

完成了!

现在,当GitHub Actions稍后运行npm install时,脚本将可以访问私有NPM包。

如果你熟悉GitHub Actions,你可能会问为什么我们不能使用GitHub自动提供的secrets.GITHUB_TOKEN ?原因是secrets.GITHUB_TOKEN 只有可以访问正在运行GitHub Actions的回购,它不能访问私有NPM包的回购。