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
i'm not using NVM and didn't feel like messing with my node installation. i realized i was trying to deploy my code from the terminal inside vscode. when i opened a new mac terminal outside of vscode with settings "open with rosetta in get info" then it worked. something to do with "fast-crc32c" unable to link without x64.
EDIT: a little over a year later I had this issue again on a new M1 primarily running arm. I am using the "n" version manager so the command i needed was "n --arch x64 <whatever_version_you_want>" in a rosetta terminal.