【问题标题】:npm ci can only install packages with an existing package-lock.json or npm-shrinkwrap.json with lockfileVersion >= 1npm ci 只能安装具有现有 package-lock.json 或 npm-shrinkwrap.json 且 lockfileVersion >= 1 的软件包
【发布时间】:2021-12-27 06:22:54
【问题描述】:

这是我在运行命令 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 step 面临的问题。

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.

【问题讨论】:

  • 请不要粘贴屏幕截图,而是显示相关命令及其输出。此外,为此,在您的项目周围有一些关于存在哪些文件的上下文会很有帮助。
  • 进行了更改。谢谢@rethab

标签: npm continuous-integration expo github-actions


【解决方案1】:

经过大量研究,我发现当您不使用npm install 安装依赖项时会发生这种情况。就我而言,我只使用纱线作为依赖项,所以我只有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

***************************************************************************************

因为我在 StackOverflow 上找不到任何解决方案,所以这是我们寻找问题的第一个去处。所以,我决定在这里写下这个答案。

这是原始答案:https://github.com/facebook/docusaurus/issues/2846#issuecomment-691706184

【讨论】:

  • 除非您想编写一些适用于多种场景的通用安装脚本,否则您可能希望坚持使用yarnnpm,但不要将两者混合使用。如果你在本地使用npm install,在CI中使用yarn install --frozen-lockfile
【解决方案2】:

旧帖子,但我在搜索同样的错误时发现了这个。在我的情况下,我确实在我的根目录中有一个package-lock.json 文件。然而,当我打开它时,我意识到在之前的合并冲突中出现了一个 JSON 语法错误。再次运行npm i 后,文件已修复。在这种情况下,npm ERR! The 'npm ci' command can only install with an existing package-lock.json 并不是一个超级有用的错误。

【讨论】:

    猜你喜欢
    • 2022-12-13
    • 2022-10-09
    • 2017-10-30
    • 2020-05-20
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多