npm ci 只能安装具有现有 package-lock.json 或 npm-shrinkwrap.json 且 lockfileVersion >= 1 的包
npm ci can only install packages with an existing package-lock.json or npm-shrinkwrap.json with lockfileVersion >= 1
这是我在 运行 命令 npm ci
在我的 GitHub 操作文件中安装依赖项时遇到的问题。
我正在开发一个 expo 管理的应用程序,并使用 GitHub Actions
作为 CI 每当我将我的代码推送到 developmemt
分支时触发构建。
这是我的构建脚本:
name: EAS PIPELINE
on:
push:
branches:
- development
workflow_dispatch:
jobs:
build:
name: Install and build
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
with:
persist-credentials: false
- name: Setup Node.js
uses: actions/setup-node@v1
with:
node-version: 14.x
- name: Setup Expo
uses: expo/expo-github-action@v6
with:
expo-version: 4.x
token: ${{ secrets.EXPO_TOKEN }}
expo-cache: true
- name: Install dependencies
run: npm ci
- name: Build on EAS
run: EAS_BUILD_AUTOCOMMIT=${{1}} npx eas-cli build --platform all --non-interactive
这是我面临的问题 Install dependencies
步骤。
Run npm ci
npm ci
shell: /usr/bin/bash -e {0}
env:
EXPO_TOKEN: ***
npm ERR! cipm can only install packages with an existing package-lock.json or npm-shrinkwrap.json with lockfileVersion >= 1. Run an install with npm@5 or later to generate it, then try again.
npm ERR! A complete log of this run can be found in:
npm ERR! /home/runner/.npm/_logs/2021-10-28T15_16_06_934Z-debug.log
Error: Process completed with exit code 1.
经过大量研究,我发现当您没有使用 npm install
安装依赖项时会发生这种情况。在我的例子中,我只使用 yarn 作为依赖项,所以我只有 yarn.lock
文件而没有 package-lock.json
文件。
解决此问题的一种方法是使用 npm install
安装依赖项,然后您将拥有一个 package-json.lock
文件并且 CI
不会抛出任何错误。
反之,如果您只想使用 yarn
,那么您需要在 eas-pipeline.yml
文件中更新该步骤以安装依赖项。
*****************************************************************************************
- name: Install dependencies
run: |
if [ -e yarn.lock ]; then
yarn install --frozen-lockfile
elif [ -e package-lock.json ]; then
npm ci
else
npm i
fi
***************************************************************************************
因为我无法在 Whosebug 上找到任何解决方案,而这是我们寻找问题的第一个去处。所以,我决定在这里写下这个答案。
这里是原始答案:https://github.com/facebook/docusaurus/issues/2846#issuecomment-691706184
旧post,但我在搜索同样的错误时发现了这个。在我的例子中,我 did 在我的根目录中有一个 package-lock.json
文件。然而,当打开它时,我意识到在之前的合并冲突中有一个 JSON 语法错误。在 运行 npm i
之后,文件再次修复。在那种情况下,npm ERR! The 'npm ci' command can only install with an existing package-lock.json
并不是一个非常有用的错误。
我遇到了类似的错误。
`npm ci` can only install packages when your package.json and package-lock.json or npm-shrinkwrap.json are in sync. Please update your lock file with `npm install` before continuing.
此错误后有一堆缺失的依赖项名称。
我会 运行 npm ci
在本地,它会 运行 成功。但是,当 npm ci
在 CI 管道中为 运行 时,它会给我上面的错误,在我的例子中,这是因为安装在 Node.js 中的版本差异Jenkins 管道 运行 所在的环境。
我的本地 Node 版本是 16.x,在 Jenkins 容器中是 12.x。
升级已修复。
对于在 AWS Amplify 上遇到此问题的人。您可能需要 运行 npm install 并提交 package-lock.json 文件,然后再次部署。
删除 deploy.json 对我有帮助,因为令牌在覆盖时会更新
rm ~/.config/configstore/@vkontakte/vk-miniapps-deploy.json
但我有其他服务
这是我在 运行 命令 npm ci
在我的 GitHub 操作文件中安装依赖项时遇到的问题。
我正在开发一个 expo 管理的应用程序,并使用 GitHub Actions
作为 CI 每当我将我的代码推送到 developmemt
分支时触发构建。
这是我的构建脚本:
name: EAS PIPELINE
on:
push:
branches:
- development
workflow_dispatch:
jobs:
build:
name: Install and build
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
with:
persist-credentials: false
- name: Setup Node.js
uses: actions/setup-node@v1
with:
node-version: 14.x
- name: Setup Expo
uses: expo/expo-github-action@v6
with:
expo-version: 4.x
token: ${{ secrets.EXPO_TOKEN }}
expo-cache: true
- name: Install dependencies
run: npm ci
- name: Build on EAS
run: EAS_BUILD_AUTOCOMMIT=${{1}} npx eas-cli build --platform all --non-interactive
这是我面临的问题 Install dependencies
步骤。
Run npm ci
npm ci
shell: /usr/bin/bash -e {0}
env:
EXPO_TOKEN: ***
npm ERR! cipm can only install packages with an existing package-lock.json or npm-shrinkwrap.json with lockfileVersion >= 1. Run an install with npm@5 or later to generate it, then try again.
npm ERR! A complete log of this run can be found in:
npm ERR! /home/runner/.npm/_logs/2021-10-28T15_16_06_934Z-debug.log
Error: Process completed with exit code 1.
经过大量研究,我发现当您没有使用 npm install
安装依赖项时会发生这种情况。在我的例子中,我只使用 yarn 作为依赖项,所以我只有 yarn.lock
文件而没有 package-lock.json
文件。
解决此问题的一种方法是使用
npm install
安装依赖项,然后您将拥有一个package-json.lock
文件并且CI
不会抛出任何错误。反之,如果您只想使用
yarn
,那么您需要在eas-pipeline.yml
文件中更新该步骤以安装依赖项。
*****************************************************************************************
- name: Install dependencies
run: |
if [ -e yarn.lock ]; then
yarn install --frozen-lockfile
elif [ -e package-lock.json ]; then
npm ci
else
npm i
fi
***************************************************************************************
因为我无法在 Whosebug 上找到任何解决方案,而这是我们寻找问题的第一个去处。所以,我决定在这里写下这个答案。
这里是原始答案:https://github.com/facebook/docusaurus/issues/2846#issuecomment-691706184
旧post,但我在搜索同样的错误时发现了这个。在我的例子中,我 did 在我的根目录中有一个 package-lock.json
文件。然而,当打开它时,我意识到在之前的合并冲突中有一个 JSON 语法错误。在 运行 npm i
之后,文件再次修复。在那种情况下,npm ERR! The 'npm ci' command can only install with an existing package-lock.json
并不是一个非常有用的错误。
我遇到了类似的错误。
`npm ci` can only install packages when your package.json and package-lock.json or npm-shrinkwrap.json are in sync. Please update your lock file with `npm install` before continuing.
此错误后有一堆缺失的依赖项名称。
我会 运行 npm ci
在本地,它会 运行 成功。但是,当 npm ci
在 CI 管道中为 运行 时,它会给我上面的错误,在我的例子中,这是因为安装在 Node.js 中的版本差异Jenkins 管道 运行 所在的环境。
我的本地 Node 版本是 16.x,在 Jenkins 容器中是 12.x。
升级已修复。
对于在 AWS Amplify 上遇到此问题的人。您可能需要 运行 npm install 并提交 package-lock.json 文件,然后再次部署。
删除 deploy.json 对我有帮助,因为令牌在覆盖时会更新
rm ~/.config/configstore/@vkontakte/vk-miniapps-deploy.json
但我有其他服务