If you're getting this kind of error when running Node.js programs with binary dependencies that don't support M1 yet, e.g.:
$ yarn test
dyld[51175]: missing symbol called
dyld[51176]: missing symbol called
tl;dr: (Re)install a x64 build of Node.js.
-
Start a new shell using Rosetta2
$ arch -x86_64 zsh
-
In that shell, reinstall the
x64
version of Node.js$ nvm use system $ nvm cache clear $ nvm uninstall 16 # or the version you need $ nvm install 16 # or the version you need $ nvm use 16 # or the version you need
-
Still in that shell, reinstall and build npm dependencies from scratch
$ rm -rf node_modules $ yarn cache clean $ yarn install
-
Whenever you come back to your project (e.g. after restarting), don't forget to select that same version of Node.js!
$ nvm use 16 # or the one you installed in step 2
If you still see the error:
-
Try (re)installing your dependencies with
npm install
instead ofyarn install
. -
It could be that the
node
command is not linked tonvm
.- To check that, run
nvm use 16; nvm ls
and check that the little arrow (->
) targetsv16
. - If it targets
system
, you may want to uninstall any other installation ofnode
(e.g.which node; brew uninstall node
), then retry the whole procedure.
- To check that, run
Yes, Rosetta2 will make all your libraries think they are running on a intel/x86 architecture. When your libraries are compatible with M1, you will probably benefit from rolling back to the M1 version of Node.js, by following the same steps again while specifying M1 in the arch command, I guess.