Expo发布在github操作中失败,但在本地工作



我试图在主分支上推送时自动发布我的应用程序。当我在本地尝试我的应用程序正确发布时,但构建在CI上失败,因为它无法解析我的组件:

expo publish --non-interactive --release-channel default
shell: /usr/bin/bash -e {0}
env:
EXPO_TOKEN: ***
[16:28:25] › Expo SDK: 44.0.0
[16:28:25] › Release channel: default
[16:28:25] › Workflow: Managed
[16:28:25] Building optimized bundles and generating sourcemaps...
[16:28:27] Starting Metro Bundler
[16:30:13] Unable to resolve module ../../components/form-controls/button from /home/runner/work/my-app/my-app/src/views/authentication/login.tsx: 
None of these files exist:
* src/components/form-controls/button(.native|.ios.ts|.native.ts|.ts|.ios.tsx|.native.tsx|.tsx|.ios.js|.native.js|.js|.ios.jsx|.native.jsx|.jsx|.ios.json|.native.json|.json)
* src/components/form-controls/button/index(.native|.ios.ts|.native.ts|.ts|.ios.tsx|.native.tsx|.tsx|.ios.js|.native.js|.js|.ios.jsx|.native.jsx|.jsx|.ios.json|.native.json|.json)
> 1 | import { useContext, useMemo, useState } from 'react';
2 | import { StyleSheet, Text, View } from 'react-native';
3 | import Button from '@components/form-controls/button';
4 | import Input from '@components/form-controls/input';
[16:30:13] Error: Unable to resolve module ../../components/form-controls/button from /home/runner/work/my-app/my-app/src/views/authentication/login.tsx: 
None of these files exist:
* src/components/form-controls/button(.native|.ios.ts|.native.ts|.ts|.ios.tsx|.native.tsx|.tsx|.ios.js|.native.js|.js|.ios.jsx|.native.jsx|.jsx|.ios.json|.native.json|.json)
* src/components/form-controls/button/index(.native|.ios.ts|.native.ts|.ts|.ios.tsx|.native.tsx|.tsx|.ios.js|.native.js|.js|.ios.jsx|.native.jsx|.jsx|.ios.json|.native.json|.json)
> 1 | import { useContext, useMemo, useState } from 'react';
2 | import { StyleSheet, Text, View } from 'react-native';
3 | import Button from '@components/form-controls/button';
4 | import Input from '@components/form-controls/input';
at ModuleResolver.resolveDependency (/home/runner/work/my-app/vmy-app/node_modules/metro/src/node-haste/DependencyGraph/ModuleResolution.js:211:15)
at DependencyGraph.resolveDependency (/home/runner/work/my-app/my-app/node_modules/metro/src/node-haste/DependencyGraph.js:413:43)
at Object.resolve (/home/runner/work/my-app/my-app/node_modules/metro/src/lib/transformHelpers.js:317:42)
at resolve (/home/runner/work/my-app/my-app/node_modules/metro/src/DeltaBundler/traverseDependencies.js:629:33)
at /home/runner/work/my-app/my-app/node_modules/metro/src/DeltaBundler/traverseDependencies.js:645:26
at Array.reduce (<anonymous>)
at resolveDependencies (/home/runner/work/my-app/my-app/node_modules/metro/src/DeltaBundler/traverseDependencies.js:644:33)
at /home/runner/work/my-app/my-app/node_modules/metro/src/DeltaBundler/traverseDependencies.js:329:33
at Generator.next (<anonymous>)
at asyncGeneratorStep (/home/runner/work/my-app/my-app/node_modules/metro/src/DeltaBundler/traverseDependencies.js:137:24)
Error: Process completed with exit code 1.

我正在使用expo/expo-github-action@v7,这里是世博会设置步骤的日志:

Run expo/expo-github-action@v7
Installing expo-cli (5.3.2) from cache or with yarn
Received 23905004 of 23905004 (100.0%), 24.6 MBs/sec
Cache Size: ~23 MB (23905004 B)
/usr/bin/tar --use-compress-program zstd -d -xf /home/runner/work/_temp/5d58b0d1-b4da-4201-8eb9-f28763655d2b/cache.tzst -P -C /home/runner/work/vozik-app/vozik-app
Cache restored successfully
Installing eas-cli (0.51.0) from cache or with yarn
Validating authenticated account
Patching system watchers for the 'ENOSPC' error

这是我的babel.config.js文件:

module.exports = function(api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
plugins: [
["module:react-native-dotenv", {
envName: "APP_ENV",
moduleName: "@env",
path: ".env",
blocklist: null,
allowlist: null,
safe: false,
allowUndefined: true,
verbose: false
}],
["module-resolver", {
root: ["./"],
alias: {
"@components": "./src/components",
"@interfaces": "./src/interfaces",
"@services": "./src/services",
"@state": "./src/state",
"@utils": "./src/utils",
"@views": "./src/views"
}
}],
]
};
};

我最初使用相对路径导入这些模块,然后尝试使用别名代替,但它没有改变任何东西。expo SDK的版本是44.0.0,expo-cli的版本是5.3.2(本地和github操作)。并且,文件src/components/form-controls/button.tsx确实存在,且路径正确。我想了解为什么构建在本地工作,但在CI上失败?

Thanks in advance

在我的例子中,事实证明一些文件在github和我的本地存储库中有不同的名称。

本地:

├── form-controls
│   ├── input.tsx
│   ├── button.tsx

Github:

├── form-controls
│   ├── Input.tsx
│   ├── Button.tsx

这是因为我在Windows上工作,它有一个不区分大小写的文件系统,在某些时候我把这两个文件重命名为小写的第一个字母。我的CI运行在ubuntu上,它有一个区分大小写的文件系统,所以metro无法解析我的模块。

为了解决这个问题,我运行了:

git config core.ignorecase false

如果你想了解更多信息,我建议你查看这个问题,或者查看git文档。

最新更新