Не удается разрешить модуль при сборке псевдонимов response-native .apk, babel-plugin-module-resolver
Я использую https://github.com/tleunen/babel-plugin-module-resolver для решения ../../../
ад. В моем .babelrc у меня есть:
{
"presets": [
"react-native",
"babel-preset-react-native-stage-0/decorator-support",
"react-native-dotenv"
],
"env": {
"development": {
"plugins": [
["module-resolver", {
"cwd": "babelrc",
"extensions": [
".js",
".ios.js",
".android.js"
],
"alias": {
"@assets": "./src/assets",
"@features": "./src/features",
"@common": "./src/common",
"@config": "./src/config",
"@services": "./src/services"
}
}],
"transform-react-jsx-source"
]
}
}
}
Пример использования: import { Text } from '@common'
И все это прекрасно работает в режиме разработки, однако, когда я пытаюсь выпустить.apk файл Android с cd android && ./gradlew assembleRelease && cd ..
Я получаю ошибку:
Unable to resolve module @common from /home/ppozniak/Projects/project-name/src/Root.js: Module does not exist in the module map
Кажется, что Gradlew не использует мой.babelrc?
версии
"babel-plugin-module-resolver": "^3.0.0",
"babel-preset-react-native": "^4.0.0",
"react-native": "0.50.3",
"react": "16.0.0",
Заранее спасибо.
2 ответа
Ладно, только я был немного глупым. Глядя на мой.babelrc вы можете
"env": {
"development": {
И это было проблемой. После этого в Android появились другие ошибки, но в итоге мне удалось их исправить.
Итак, урок на будущее: следите за своими делами.
Мой babelrc сейчас:
{
"presets": [
"react-native",
"babel-preset-react-native-stage-0/decorator-support",
],
"plugins": [
"transform-react-jsx-source", ["module-resolver", {
"extensions": [
".js",
".ios.js",
".android.js"
],
"alias": {
"@assets": "./src/assets",
"@features": "./src/features",
"@common": "./src/common",
"@config": "./src/config",
"@services": "./src/services"
}
}]
]
}
Я подозреваю, что это потому, что когда вы выполняете задание Gradle assembleRelease
он также вызывает файл Gradle внутри node_modules/react-native/react.gradle
, Это означает, что когда вы находитесь в режиме разработки (обслуживаете пакет js через сервер), вы используете .babelrc
файл, но когда вы выполняете в режиме релиза, он вообще не использует babel. Реагировать нативно использовать свои собственные полифилы.
Моя идея состоит в том, чтобы передать несколько дополнительных командных аргументов react-native bundle
Команда, чтобы попытаться определить свой корень .babelrc
файл путем изменения корней проекта:
Так:
Создайте новую папку в вашем корневом проекте и поместите туда babelrc (давайте назовем эту папку native-config
)
Тогда на вашем ./android/app/build.gradle
, Добавь это:
project.ext.react = [
entryFile: "index.android.js", /* Your entry file */
extraPackagerArgs: "--projectRoots ../../native-config,../../"
]
/*
* Make sure this next line is AFTER the above
* also, the line below is the command that runs react-native bundle
* and don't use babel. Each key in the array above is an extra
* CLI arg
*/
apply from: "../../node_modules/react-native/react.gradle"
По словам этого парня, этот странный проект Root может сделать свое дело.
Желаем удачи в этом, надеюсь, что это даст вам хотя бы ощущение того, что происходит.