Github Actions for NodeJS - 'Error: Cannot find module' for local file
Github Actions for NodeJS - 'Error: Cannot find module' for local file
我有一个用于 Node.js 项目的 GitHub 工作流程文件:
name: NodeJS CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [10.x]
steps:
- uses: actions/checkout@v2
- name: Using Node version ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- run: npm ci
- run: npm run build --if-present
- run: npm test
- name: Upload code coverage
run: bash <(curl -s https://codecov.io/bash) -t $CODECOV_TOKEN
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
项目结构如下:
.
├── package-lock.json
├── package.json
├── src
│ ├── api
│ │ ├── calendar.js
│ │ ├── credentials.js
│ │ └── token.js
│ ├── app.js
│ ├── builders
│ │ └── event.js
│ ├── config
│ │ └── index.js
│ ├── loaders
│ │ ├── express.js
│ │ ├── index.js
│ │ └── mongo.js
│ ├── models
│ │ ├── credential.js
│ │ └── token.js
│ ├── scripts
│ │ └── tokenGenerator.js
│ └── services
│ ├── calendar.js
│ ├── credentials.js
│ ├── google.js
│ ├── mongo.js
│ └── token.js
└── tests
├── dbHandler.js
└── services
├── calendar.js
├── google.js
└── mongo.js
在本地,当我 运行 npm test
时,我的测试通过了,没有报告任何问题。但是,当在 Github 操作上测试 运行 时,出现以下错误:
Run npm test
> my-repo@1.0.4 test /home/runner/work/my-repo/my-repo
> nyc --reporter=html mocha 'tests/**/*.js' --exit
Error: Cannot find module '../models/credential'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
at Function.Module._load (internal/modules/cjs/loader.js:562:25)
at Module.require (internal/modules/cjs/loader.js:692:17)
at require (internal/modules/cjs/helpers.js:25:18)
at Object.<anonymous> (/home/runner/work/my-repo/my-repo/src/services/mongo.js:2:140)
etc..
有问题的文件有相对要求:
const CredentialSchema = require('../models/credential');
const TokenSchema = require('../models/token');
我已经尝试了很多事情:
- 使用
process.cwd()
以及文件夹结构的其余部分来获取绝对文件路径
- 将
.js
附加到要求
- 不同版本的节点
- 我机器上和 Github 操作中的节点版本相同
但似乎无法解决该错误。我的 node_modules
文件夹在 .gitignore
中被忽略了。
repo 是私有的,但我认为这与它没有任何关系。
原来 git 没有在我的文件中检测到区分大小写的更改。
运行 git mv -f src/models/Credential.js src/models/credential.js
然后推送更改修复它。
我有一个用于 Node.js 项目的 GitHub 工作流程文件:
name: NodeJS CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [10.x]
steps:
- uses: actions/checkout@v2
- name: Using Node version ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- run: npm ci
- run: npm run build --if-present
- run: npm test
- name: Upload code coverage
run: bash <(curl -s https://codecov.io/bash) -t $CODECOV_TOKEN
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
项目结构如下:
.
├── package-lock.json
├── package.json
├── src
│ ├── api
│ │ ├── calendar.js
│ │ ├── credentials.js
│ │ └── token.js
│ ├── app.js
│ ├── builders
│ │ └── event.js
│ ├── config
│ │ └── index.js
│ ├── loaders
│ │ ├── express.js
│ │ ├── index.js
│ │ └── mongo.js
│ ├── models
│ │ ├── credential.js
│ │ └── token.js
│ ├── scripts
│ │ └── tokenGenerator.js
│ └── services
│ ├── calendar.js
│ ├── credentials.js
│ ├── google.js
│ ├── mongo.js
│ └── token.js
└── tests
├── dbHandler.js
└── services
├── calendar.js
├── google.js
└── mongo.js
在本地,当我 运行 npm test
时,我的测试通过了,没有报告任何问题。但是,当在 Github 操作上测试 运行 时,出现以下错误:
Run npm test
> my-repo@1.0.4 test /home/runner/work/my-repo/my-repo
> nyc --reporter=html mocha 'tests/**/*.js' --exit
Error: Cannot find module '../models/credential'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
at Function.Module._load (internal/modules/cjs/loader.js:562:25)
at Module.require (internal/modules/cjs/loader.js:692:17)
at require (internal/modules/cjs/helpers.js:25:18)
at Object.<anonymous> (/home/runner/work/my-repo/my-repo/src/services/mongo.js:2:140)
etc..
有问题的文件有相对要求:
const CredentialSchema = require('../models/credential');
const TokenSchema = require('../models/token');
我已经尝试了很多事情:
- 使用
process.cwd()
以及文件夹结构的其余部分来获取绝对文件路径 - 将
.js
附加到要求 - 不同版本的节点
- 我机器上和 Github 操作中的节点版本相同
但似乎无法解决该错误。我的 node_modules
文件夹在 .gitignore
中被忽略了。
repo 是私有的,但我认为这与它没有任何关系。
原来 git 没有在我的文件中检测到区分大小写的更改。
运行 git mv -f src/models/Credential.js src/models/credential.js
然后推送更改修复它。