nodenv と arch を使って m1 mac に古いバージョンの node をインストールする


エラー

M1 mac + nodenv を利用していてローカルのマイナーバージョンを更新したところ以下のエラーが発生するようになってしまった

.node-version
12.22.9
$ yarn build
yarn run v1.22.10
9% setup compilation ...ePlugin
<--- Last few GCs --->

[61545:0x158008000]      605 ms: Scavenge 33.8 (52.3) -> 22.1 (53.3) MB, 1.5 / 0.0 ms  (average mu = 1.000, current mu = 1.000) allocation failure
[61545:0x158008000]      741 ms: Scavenge 36.2 (53.8) -> 25.4 (56.8) MB, 2.5 / 0.1 ms  (average mu = 1.000, current mu = 1.000) allocation failure
[61545:0x158008000]      867 ms: Scavenge 41.2 (58.4) -> 30.4 (61.4) MB, 1.9 / 0.0 ms  (average mu = 1.000, current mu = 1.000) allocation failure


<--- JS stacktrace --->

==== JS stack trace =========================================

Security context: 0x0001071c08d1 <JSObject>
    0: builtin exit frame: new constructor(aka Module)(this=0x00011162b5a9 <Object map = 0x113058179>,0x00011162b459 <Uint8Array map = 0x1071a59b9>,0x00011162b5a9 <Object map = 0x113058179>)

    1: ConstructFrame [pc: 0x104e34cd8]
    2: StubFrame [pc: 0x104f1d784]
    3: /* anonymous */ [0x111624da1] [/Users/shootani/work/icare/www/node_modules/webpack/lib/util/hash/md4.js:11] [bytecode=0x1130...

FATAL ERROR: wasm code commit Allocation failed - process out of memory
 1: 0x104667178 node::Abort() [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
 2: 0x1046672f8 node::errors::TryCatchScope::~TryCatchScope() [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
 3: 0x10478757c v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
 4: 0x104787510 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
 5: 0x104cbfccc v8::internal::wasm::WasmCodeAllocator::AllocateForCodeInRegion(v8::internal::wasm::NativeModule*, unsigned long, v8::base::AddressRegion) [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
 6: 0x104cc0ba8 v8::internal::wasm::NativeModule::CreateEmptyJumpTableInRegion(unsigned int, v8::base::AddressRegion) [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
 7: 0x104cc0070 v8::internal::wasm::NativeModule::AddCodeSpace(v8::base::AddressRegion) [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
 8: 0x104cc09e4 v8::internal::wasm::NativeModule::NativeModule(v8::internal::wasm::WasmEngine*, v8::internal::wasm::WasmFeatures const&, bool, v8::internal::VirtualMemory, std::__1::shared_ptr<v8::internal::wasm::WasmModule const>, std::__1::shared_ptr<v8::internal::Counters>, std::__1::shared_ptr<v8::internal::wasm::NativeModule>*) [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
 9: 0x104cc2c24 v8::internal::wasm::WasmCodeManager::NewNativeModule(v8::internal::wasm::WasmEngine*, v8::internal::Isolate*, v8::internal::wasm::WasmFeatures const&, unsigned long, bool, std::__1::shared_ptr<v8::internal::wasm::WasmModule const>) [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
10: 0x104cc952c v8::internal::wasm::WasmEngine::NewNativeModule(v8::internal::Isolate*, v8::internal::wasm::WasmFeatures const&, unsigned long, bool, std::__1::shared_ptr<v8::internal::wasm::WasmModule const>) [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
11: 0x104cc9474 v8::internal::wasm::WasmEngine::NewNativeModule(v8::internal::Isolate*, v8::internal::wasm::WasmFeatures const&, std::__1::shared_ptr<v8::internal::wasm::WasmModule const>) [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
12: 0x104ca0f88 v8::internal::wasm::CompileToNativeModule(v8::internal::Isolate*, v8::internal::wasm::WasmFeatures const&, v8::internal::wasm::ErrorThrower*, std::__1::shared_ptr<v8::internal::wasm::WasmModule const>, v8::internal::wasm::ModuleWireBytes const&, v8::internal::Handle<v8::internal::FixedArray>*) [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
13: 0x104cc7120 v8::internal::wasm::WasmEngine::SyncCompile(v8::internal::Isolate*, v8::internal::wasm::WasmFeatures const&, v8::internal::wasm::ErrorThrower*, v8::internal::wasm::ModuleWireBytes const&) [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
14: 0x104ce86a8 v8::(anonymous namespace)::WebAssemblyModule(v8::FunctionCallbackInfo<v8::Value> const&) [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
15: 0x1047ebb54 v8::internal::FunctionCallbackArguments::Call(v8::internal::CallHandlerInfo) [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
16: 0x1047eaebc v8::internal::MaybeHandle<v8::internal::Object> v8::internal::(anonymous namespace)::HandleApiCallHelper<true>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::FunctionTemplateInfo>, v8::internal::Handle<v8::internal::Object>, v8::internal::BuiltinArguments) [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
17: 0x1047ea9b8 v8::internal::Builtin_Impl_HandleApiCall(v8::internal::BuiltinArguments, v8::internal::Isolate*) [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
18: 0x104eb764c Builtins_CEntry_Return1_DontSaveFPRegs_ArgvOnStack_BuiltinExit [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
19: 0x104e34cd8 Builtins_JSBuiltinsConstructStub [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
20: 0x104f1d784 Builtins_ConstructHandler [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
21: 0x104e39aa0 Builtins_InterpreterEntryTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
22: 0x104e39aa0 Builtins_InterpreterEntryTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
23: 0x104e39aa0 Builtins_InterpreterEntryTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
24: 0x104e39aa0 Builtins_InterpreterEntryTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
25: 0x104e39aa0 Builtins_InterpreterEntryTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
26: 0x104e39aa0 Builtins_InterpreterEntryTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
27: 0x104e39aa0 Builtins_InterpreterEntryTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
28: 0x104e39aa0 Builtins_InterpreterEntryTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
29: 0x104e39aa0 Builtins_InterpreterEntryTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
30: 0x104e39aa0 Builtins_InterpreterEntryTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
31: 0x104e39aa0 Builtins_InterpreterEntryTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
32: 0x104e31f68 Builtins_ArgumentsAdaptorTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
33: 0x104e39aa0 Builtins_InterpreterEntryTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
34: 0x104e39aa0 Builtins_InterpreterEntryTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
35: 0x104e31f68 Builtins_ArgumentsAdaptorTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
36: 0x104e39aa0 Builtins_InterpreterEntryTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
37: 0x104e39aa0 Builtins_InterpreterEntryTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
38: 0x104e31f68 Builtins_ArgumentsAdaptorTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
39: 0x104e39aa0 Builtins_InterpreterEntryTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
40: 0x104e39aa0 Builtins_InterpreterEntryTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
41: 0x104e31f68 Builtins_ArgumentsAdaptorTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
42: 0x104e39aa0 Builtins_InterpreterEntryTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
43: 0x104e39aa0 Builtins_InterpreterEntryTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
44: 0x104e31f68 Builtins_ArgumentsAdaptorTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
45: 0x104e39aa0 Builtins_InterpreterEntryTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
46: 0x104e39aa0 Builtins_InterpreterEntryTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
47: 0x104e31f68 Builtins_ArgumentsAdaptorTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
48: 0x104e39aa0 Builtins_InterpreterEntryTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
49: 0x104e31f68 Builtins_ArgumentsAdaptorTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
50: 0x104e39aa0 Builtins_InterpreterEntryTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
51: 0x104e39aa0 Builtins_InterpreterEntryTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
52: 0x104e31f68 Builtins_ArgumentsAdaptorTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
53: 0x104e39aa0 Builtins_InterpreterEntryTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
54: 0x104e39aa0 Builtins_InterpreterEntryTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
55: 0x104e39aa0 Builtins_InterpreterEntryTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
56: 0x104e39aa0 Builtins_InterpreterEntryTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
57: 0x104e31f68 Builtins_ArgumentsAdaptorTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
58: 0x104e39aa0 Builtins_InterpreterEntryTrampoline [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
59: 0x104e66444 Builtins_AsyncFunctionAwaitResolveClosure [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
60: 0x104e8ab80 Builtins_PromiseFulfillReactionJob [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
61: 0x104e58440 Builtins_RunMicrotasks [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
62: 0x104e36a0c Builtins_JSRunMicrotasksEntry [/Users/shootani/.nodenv/versions/12.22.9/bin/node]
63: 0x158008000
error Command failed with signal "SIGABRT".
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

原因

node の v12 系が arm アーキテクチャに対応していないため

参考:https://stackoverflow.com/questions/65856300/wasm-code-commit-allocation-failed-process-out-of-memory

対応方法

x86_64 アーキテクチャバージョンの node を rosseta2 経由でインストールすることで解決する

# 現在のアーキテクチャを確認する
$ node
Welcome to Node.js v12.22.9.
Type ".help" for more information.
>
> process.arch
'arm64'

# アーキテクチャを指定してインストールし直す
$ uname -m
arm64
$ nodenv uninstall 12.22.9
$ arch -x86_64 ${SHELL}
$ uname -m
x86_64
$ nodenv install 12.22.9
$ exit

# 新しくインストールした node のアーキテクチャを確認する
$ node
Welcome to Node.js v12.22.9.
Type ".help" for more information.
>
> process.arch
'x64'

※ うまくいかない場合、 Rosseta2 が有効になっているかどうかを確認してください