下面是一个工作脚本。但让我烦恼的是:
- name: install npm
run: npm i npm@latest
working-directory: ./functions我必须安装NPM的最新版本,否则我会得到以下错误:
npm WARN read-shrinkwrap This version of npm is compatible with lockfileVersion@1, but package-lock.json was generated for lockfileVersion@2. I'll try to do my best with it!忽略此错误并不会安装运行Firebase函数所需的npm包。我有其他的github动作脚本不需要这样的手握。我在这里做错什么了?
完整脚本:
name: Deploy to Firebase Functions
on:
push:
branches:
- main
# Optionally configure to run only for specific files. For example:
paths:
- "functions/**"
jobs:
main:
name: Deploy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Use Node.js 14
uses: actions/setup-node@v2
with:
node-version: '14'
- name: install npm
run: npm i npm@latest
working-directory: ./functions
- name: install libraries
run: npm i
working-directory: ./functions
- name: install firebase
run: npm i firebase-tools -g
- name: deploy
run: firebase deploy --only functions --token ${{ secrets.FIREBASE_FUNCTIONS_TOKEN }}
working-directory: ./functions发布于 2021-09-21 18:43:30
问题是,生成package-lock.json的package-lock.json版本与Node.js V14中包含的npm版本不兼容。
第一个选项可以是在CI中使用这样的Node.js版本,该版本已经包含了与lockfileVersion@2兼容的此类npm版本。但是,lockfileVersion@2是npm第7版支持的,它是最新的 Node.js版本的一部分。使用LTS版本的Node是一个更好的选择,因为未来的安全更新,所以我不推荐这个选项。
作为第二种选择,packgage-lock.json可以使用带有npm V6的Node.js LTS版本重新生成。这样,lockfileVersion就可以用于Node 14 (现在是LTS版本)的CI。我认为这是最好的选择。
作为第三种选择,一个想法是尝试npm ci命令,但我不确定这种方法在这种情况下是否有效。
https://stackoverflow.com/questions/69273523
复制相似问题