Expo publish 在 github 操作中失败,但在本地有效

Expo publish fails in github actions but works locally

我试图在主分支上推送时自动在 expo 上发布我的应用程序。当我在本地尝试时,我的应用程序已正确发布,但在 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,这里是 expo 设置步骤的日志:

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?

上失败

提前致谢

就我而言,事实证明某些文件在 github 和我的本地存储库中具有不同的名称。

本地:

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

Github:

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

这是因为我正在处理具有 case-insensitive 文件系统的 Windows,并且在某些时候我将这两个文件重命名为小写首字母。我的 CI 在 ubuntu 上是 运行,它有区分大小写的文件系统,所以 Metro 无法解析我的模块。

为了修复它,我 运行:

git config core.ignorecase false

如果您想了解更多信息,我建议查看 this question, or the git documentation