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。
我试图在主分支上推送时自动在 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。