Hello. I am unable to get expo command working in my Debian 11.
First, I followed a tutorial for Windows - it did not mention the requirement of Watchman. But after installing Watchman and reinstaling expo, it still does not work. I even tried to open a new terminal tab, after finishing the expo installing command, to make sure it was not a problem of not updated environment (which is something I have passed by these last days). It is not. Look at some terminal output:
The command returned zero, apparently showing it did not ended with an error. Still, there is not any command in $PATH for my user that starts with “expo”, except “export”. I expected to find “expo” and maybe “expo-cli”.
During this whole week I have been fighting with this problem. Before trying to install expo, I discovered pnpm, as an alternative to npm. It seemed interesting, and I thought it could solve it. But it brought me another problem: nodejs version needed to be 14+. The Debian 11 repository does not currently have versions 14+ available. But I added a node.js repository here with the command:
I found this solution for nodejs by searching the web, and reading some pages about the problem. This made version 14.20.0 be installed. Fine. But the output shown above was done after this. So it may not be related to the problem.
You should install it globally, not in your project. (This is changing in Expo SDK 46, which is currently in beta with the final version expected in about a week.)
i.e., for now do npm install -g expo-cli
Then, depending on the way nodejs is installed, you should have an expo command in your $PATH.
I’ve not tried it, and in my time on the forums I don’t think I have seen anyone else using it either. So, while I can’t say for sure that it will not work, I would rather stick to npm or yarn. (Actually, I’ve seen some issues with installing expo-cli globally with yarn, so for the globally installed Expo stuff, stick with npm. You can still use yarn for managing your app’s dependencies if you like.)
Try installing expo-cli globally and see if that sorts out the problem. If not, you’ll likely need to update your $PATH to point to npm’s global bin directory.
My first try was that, @wodin . And since it did not work, I changed for an user only install. And if I am not in a project folder, npm install <something> will install for all projects inside ~/.local folder, no? The ~/.local/bin is in my $PATH for some other things too.
Doing a simple test, it seems not. It will install in the current folder, right? But there is something very strange with the way it is installed in the current folder. The command npm install expo-cli creates a folder named node_modules, with several folders inside it. Specifically, there are only 3 folders which names start with “expo”:
expo-cli/
expo-modules-autolinking/
expo-pwa/
Each one of these folders (and all others inside node_modules) contain a bin folder. But after the command finishes, no change is made to user’s $PATH variable! So, naturally, it will not add anything to available commands.
Inside expo-cli/bin folder there is only one file. And if I execute this file, the output will be:
$ ./node_modules/expo-cli/bin/expo.js --version
5.5.1
$ ./node_modules/expo-cli/bin/expo.js
Usage: expo [command] [options]
Options:
-V, --version output the version number
--non-interactive Fail, if an interactive prompt would be required to continue.
-h, --help output usage information
Commands:
init [name] Create a new Expo project
start [path] Start a local dev server for the app
start:web [path] Start a Webpack dev server for the web app
export [path] Export the static files of the app for hosting it on a web server
install [packages...] Install a module or other package to a project
run:android [path] Run the Android app binary locally
run:ios [path] Run the iOS app binary locally
send [path] Share the project's URL to an email address
login Login to an Expo account
logout Logout of an Expo account
register Sign up for a new Expo account
whoami Return the currently authenticated account
client:install:ios Install Expo Go for iOS on the simulator
client:install:android Install Expo Go for Android on a connected device or emulator
config [path] Show the project config
doctor [path] Diagnose issues with the project
upgrade [sdk-version] Upgrade the project packages and config for the given SDK version
customize:web [path] Eject the default web files for customization
prebuild [path] Create native iOS and Android project files before building natively.
Learn more.
publish [path] Deploy a project to Expo hosting
publish:set [path] Specify the channel to serve a published release
publish:rollback [path] Undo an update to a channel
publish:history [path] Log the project's releases
publish:details [path] Log details of a published release
build:web [path] Build the web app for production
credentials:manager [path] Manage your credentials
fetch:ios:certs [path] Download the project's iOS standalone app signing credentials
fetch:android:keystore [path] Download the project's Android keystore
fetch:android:hashes [path] Compute and log the project's Android key hashes
fetch:android:upload-cert [path] Download the project's Android keystore
push:android:upload [path] Upload an FCM key for Android push notifications
push:android:show [path] Log the value currently in use for FCM notifications for this project
push:android:clear [path] Delete a previously uploaded FCM credential
url [path] Log a URL for opening the project in Expo Go
url:ipa [path] Log the download URL for the standalone iOS binary
url:apk [path] Log the download URL for the standalone Android binary
webhooks [path] List all webhooks for a project
webhooks:add [path] Add a webhook to a project
webhooks:remove [path] Delete a webhook
webhooks:update [path] Update an existing webhook
build:ios [path] Superseded by eas build in eas-cli
build:android [path] Superseded by eas build in eas-cli
build:status [path] Superseded by eas build:list in eas-cli
eject [path] Superseded by expo prebuild
upload:android [path] Superseded by eas submit in eas-cli
upload:ios [path] Superseded by eas submit in eas-cli
client:ios [path] Superseded by Expo Dev Clients
Run a command with --help for more info đź’ˇ
$ expo start --help
Notice the output of expo.js says its name is just expo! So, is my problem “just” adding all these bin folders into $PATH? But having so many folders there does not feel right… why are not node_modules/<each module>/bin/* being installed in a single folder, which already is on $PATH, or which will be added to it?
OK, you definitely should install expo-cli (and eas-cli) globally, but it seems that your node installation is set up such that that will be impossible without running the installation as root, which you should not do.
You should remove any node_modules directory and package-lock.json and package.json files that were created from running npm install in directories other than an Expo (or other JavaScript) project directory. (e.g. if you ran it in your home directory, remove them from there.)
When you install npm packages that include scripts/binaries, your PATH will never be altered. You will either have to configure npm to use a directory that is already in your PATH, or probably better, add the directory that npm uses to your PATH.
You can configure npm to install global packages somewhere in your home directory and you can also customise where its bin directory is.