sak*_*a73 79 continuous-integration npm expo github-actions
npm ci这是我在 GitHub Action 文件中运行命令安装依赖项时遇到的问题。
我正在开发一个博览会管理的应用程序,并用作GitHub ActionsCI 来触发构建,每当我将代码推送到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
Run Code Online (Sandbox Code Playgroud)
这是我面临的问题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.
Run Code Online (Sandbox Code Playgroud)
sak*_*a73 53
经过大量研究,我发现当您不使用npm install安装依赖项时会发生这种情况。就我而言,我仅使用纱线作为依赖项,因此我只有yarn.lock文件而没有package-lock.json文件。
解决此问题的一种方法是使用npm install安装依赖项,然后您将拥有一个package-lock.json文件并且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
***************************************************************************************
Run Code Online (Sandbox Code Playgroud)
由于我无法在 StackOverflow 上找到任何解决方案,因此这是我们查找任何问题的第一个去处。所以,我决定把这个答案写在这里。
这是原始答案:https://github.com/facebook/docusaurus/issues/2846#issuecomment-691706184
Ege*_*Ege 39
我有一个类似的错误:
`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.
Run Code Online (Sandbox Code Playgroud)
此错误后缺少一堆依赖项名称。
我会npm ci在本地运行,它会成功运行。然而,当在 CI 管道中运行时,它会给我上面的错误npm ci,在我的例子中,这是因为 Jenkins 管道运行的环境中安装的 Node.js 版本不同。
我的本地 Node 版本是 16.x,在 Jenkins 容器中是 12.x。
升级就修复了。
小智 30
同样的事情也发生在我身上,我很长时间也想不通。原来我legacy-peer-deps=true设置的是全局的,我自己也不知道。
这导致我的npm install命令以package-lock.json破坏 CI 服务器上构建的方式进行更改。我重置package-lock.json了版本master,删除了该npm配置,然后重新安装。之后一切工作正常。
小智 25
您的 package.json 和 package-lock.json 似乎未同步。
尝试运行这个npm install --package-lock-only。它将生成与您的 package.json 同步的 package-lock.json
DJ *_*use 12
老帖子,但我在搜索同样的错误时发现了这一点。就我而言,我的根目录中有一个文件。package-lock.json然而,当打开它时,我意识到在之前的合并冲突期间出现了 JSON 语法错误。再次运行后npm i文件已修复。在这种情况下,这npm ERR! The 'npm ci' command can only install with an existing package-lock.json并不是一个非常有用的错误。
小智 9
我在 AWS Amplify 上挣扎了大约 5 个小时,因为显然我的 package-lock.json 和 package.json 没有同步;我对自己的代码没有做任何事情来解决这个问题(甚至删除 package-lock.json),最终起作用的是更改 Amplify 页面的“构建设置”选项卡内的应用程序构建规范内的预构建设置。
我的 yml 文件最终看起来像这样:
version: 1
frontend:
phases:
preBuild:
commands:
- npm install --package-lock-only
- npm ci
build:
commands:
- npm run build
artifacts:
baseDirectory: build
files:
- '**/*'
cache:
paths:
- node_modules/**/*
Run Code Online (Sandbox Code Playgroud)
值得注意的是,与默认设置的唯一区别是包括-npm install --package-lock-only同步 AWS 内的文件。也许有点明显,但我被困了几个小时,希望我能帮助别人。
就我而言,我在尝试将其部署到 Firebase 时遇到了同样的问题。当我运行时,firebase deploy --only functions它会产生此错误并且无法正确部署该功能。我尝试了这里的所有步骤。删除package-lock.json然后运行npm i也没用。使用节点版本管理器 (nvm) 升级然后降级我的节点版本不起作用。
效果很好的是删除 package-lock.json 文件并且之后不再运行。 npm install当我运行它时firebase deploy --only functions,它已成功部署。
请注意:虽然这个解决方案对我有用,但它可能会导致其他并发症。
| 归档时间: |
|
| 查看次数: |
133435 次 |
| 最近记录: |