sak*_*a73 79 continuous-integration npm expo github-actions
npm ci
这是我在 GitHub Action 文件中运行命令安装依赖项时遇到的问题。
我正在开发一个博览会管理的应用程序,并用作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
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 次 |
最近记录: |