如何将私人 Github 存储库列为"dependency"
in package.json
?我尝试了npm 的 Github URL语法,例如ryanve/example
,但npm install
在包文件夹中执行私有依赖项会出现“无法安装”错误。是否有依赖私人回购的特殊语法(或其他一些机制)?
6 回答
它可以通过https 和 oauth 或ssh 完成。
https 和 oauth: 创建一个具有“repo”范围的访问令牌,然后使用以下语法:
"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"
(注意在用户之前使用冒号而不是斜杠)
如果有人正在为 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
Github > Click on Profile > Settings > Developer settings > Personal access tokens > Generate new token
在 Select Scopes 部分中,检查 on repo:完全控制私有存储库
这样令牌可以访问用户可以看到的私有存储库
现在在您的组织中创建新组,将此用户添加到该组并仅添加您希望以这种方式提取的存储库(只读权限!)
您需要确保仅将此配置推送到私人仓库
然后你可以把这个添加到你的 /packages.json 中(bot-user 是用户名,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
回购中没有访问令牌的NPM
此方法要求使用包的任何人都使用他们自己的个人访问令牌而不是单个组令牌进行身份验证,这使得存储库没有访问令牌。您也不需要在每次不再授予用户访问权限时创建新的访问令牌,相反,从 GitHub 的存储库中删除用户将自动删除他们的包访问权限。
这是 GitHub 的 NPM 指南的精简版: https ://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-npm-registry
将您的 GitHub 存储库发布为 NPM 包
- 在开发者设置中创建个人访问令牌:https ://github.com/settings/tokens
- 登录到 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
- 更新
package.json
, 遵循以下格式。
"name": "@jessica/my-npm-package",
"repository": "git://github.com/jessica/my-npm-package.git",
"publishConfig": {
"registry":"https://npm.pkg.github.com"
},
- 要发布 NPM 包,请运行:
npm publish
在项目中安装私有 NPM 包
- 以与上述步骤 2 相同的方式登录到 NPM。
- 安装包
npm install @jessica/my-npm-package
完毕!
如果您的项目将具有需要安装此私有 NPM 包的 GitHub Actions 脚本,请继续阅读。
GitHub Actions:如何安装私有 NPM 包
在 CI 环境中,您还需要npm login
进行类似的身份验证。否则,npm install
将失败,因为它无权访问私有 NPM 包。一种预先配置的方法是使用.npmrc
文件;但是,这会将身份验证凭据提交到带有该文件的存储库。因此,另一种方法是使用 NPM 工具npm-cli-login。有一个要求是您要么使用自己的个人访问令牌(不是最佳选择:您离开 repo,CI 中断),或者专门为 CI 设置一个 GitHub 帐户并使用该帐户创建一个访问令牌。
- 使用仅限 CI 的 GitHub 帐户创建访问令牌,或从您自己的 GitHub 帐户获取访问令牌。
- 在回购设置中将该访问令牌作为“秘密”添加到您的回购中。
- 更新您的 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_SECRET
、和。USERNAME
_EMAIL
SCOPE
例如
- 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,您可能会问为什么我们不能使用secrets.GITHUB_TOKEN
GitHub 自动提供的功能?原因是secrets.GITHUB_TOKEN
只能访问运行 GitHub Actions 的 repo,它无权访问私有 NPM 包的 repo。
我无法让接受的答案在Docker容器中工作。
对我有用的是在一个名为的文件中设置来自 GitHub的个人访问令牌.netrc
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 创建链接到您的用户名的令牌并且没有令牌名称,因此,请使用您的用户名而不是 github 的 token_name。