解决m1芯片Mac安装node失败问题

5 篇文章 0 订阅

用nvm安装node时终端报错: 

.type aesni_cbc_sha256_enc_avx2,@function
^
../deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/aes/aesni-sha256-x86_64.s:2439:8: error: invalid alignment value
.align 64
       ^
../deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/aes/aesni-sha256-x86_64.s:4080:1: error: unknown directive
.size aesni_cbc_sha256_enc_avx2,.-aesni_cbc_sha256_enc_avx2
^
../deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/aes/aesni-sha256-x86_64.s:4081:1: error: unknown directive
.type aesni_cbc_sha256_enc_shaext,@function
^
../deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/aes/aesni-sha256-x86_64.s:4082:8: error: invalid alignment value
.align 32
       ^
../deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/aes/aesni-sha256-x86_64.s:4435:1: error: unknown directive
.size aesni_cbc_sha256_enc_shaext,.-aesni_cbc_sha256_enc_shaext
^
make[1]: *** [/Users/admin/.nvm/.cache/src/node-v10.24.1/files/out/Release/obj.target/openssl/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/aes/aesni-sha256-x86_64.o] Error 1
rm a151194e89fcf3752f3d05351e9f891bee165204.intermediate
make: *** [node] Error 2
nvm: install v10.24.1 failed!

或者安装npm包时终端报错:

<--- Last few GCs --->

[57807:0x128008000]       54 ms: Scavenge 11.1 (14.0) -> 10.5 (14.8) MB, 0.4 / 0.0 ms  (average mu = 1.000, current mu = 1.000) allocation failure
[57807:0x128008000]       58 ms: Scavenge 11.7 (15.0) -> 11.1 (15.8) MB, 0.3 / 0.0 ms  (average mu = 1.000, current mu = 1.000) allocation failure
[57807:0x128008000]       66 ms: Scavenge 13.4 (16.4) -> 12.8 (21.9) MB, 0.7 / 0.0 ms  (average mu = 1.000, current mu = 1.000) allocation failure


<--- JS stacktrace --->

FATAL ERROR: wasm code commit Allocation failed - process out of memory
 1: 0x102290c38 node::Abort() [/opt/homebrew/bin/node]
 2: 0x102290db8 std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_string<std::nullptr_t>(char const*) [/opt/homebrew/bin/node]
 3: 0x102396c14 v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [/opt/homebrew/bin/node]
 4: 0x102396ba8 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/opt/homebrew/bin/node]
 5: 0x1027c4fa4 v8::internal::wasm::WasmCodeAllocator::AllocateForCodeInRegion(v8::internal::wasm::NativeModule*, unsigned long, v8::base::AddressRegion) [/opt/homebrew/bin/node]
 6: 0x1027c5c1c v8::internal::wasm::NativeModule::CreateEmptyJumpTableInRegion(unsigned int, v8::base::AddressRegion) [/opt/homebrew/bin/node]
 7: 0x1027c51e8 v8::internal::wasm::NativeModule::AddCodeSpace(v8::base::AddressRegion) [/opt/homebrew/bin/node]
 8: 0x1027c5a64 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>*) [/opt/homebrew/bin/node]
 9: 0x1027c7944 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>) [/opt/homebrew/bin/node]
10: 0x1027cdc70 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>) [/opt/homebrew/bin/node]
11: 0x1027cdbb8 v8::internal::wasm::WasmEngine::NewNativeModule(v8::internal::Isolate*, v8::internal::wasm::WasmFeatures const&, std::__1::shared_ptr<v8::internal::wasm::WasmModule const>) [/opt/homebrew/bin/node]
12: 0x1027ac3a8 v8::internal::wasm::AsyncCompileJob::CreateNativeModule(std::__1::shared_ptr<v8::internal::wasm::WasmModule const>) [/opt/homebrew/bin/node]
13: 0x1027b3860 v8::internal::wasm::AsyncCompileJob::PrepareAndStartCompile::RunInForeground(v8::internal::wasm::AsyncCompileJob*) [/opt/homebrew/bin/node]
14: 0x1027b4004 v8::internal::wasm::AsyncCompileJob::CompileStep::Run(v8::internal::wasm::AsyncCompileJob*, bool) [/opt/homebrew/bin/node]
15: 0x1027b3f14 v8::internal::wasm::AsyncCompileJob::CompileTask::RunInternal() [/opt/homebrew/bin/node]
16: 0x1022e66cc node::PerIsolatePlatformData::RunForegroundTask(std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> >) [/opt/homebrew/bin/node]
17: 0x1022e58f4 node::PerIsolatePlatformData::FlushForegroundTasksInternal() [/opt/homebrew/bin/node]
18: 0x1028da454 uv__async_io [/opt/homebrew/bin/node]
19: 0x1028e9fdc uv__io_poll [/opt/homebrew/bin/node]
20: 0x1028da874 uv_run [/opt/homebrew/bin/node]
21: 0x1022c6aa0 node::NodeMainInstance::Run() [/opt/homebrew/bin/node]
22: 0x10226d8c0 node::Start(int, char**) [/opt/homebrew/bin/node]
23: 0x18a195450 start [/usr/lib/system/libdyld.dylib]
[1]    57806 abort      npm run dev

原因:

Node 在新款的 Mac 的 M1 macOS 系统运行的不是很好。就比如有些脚本在建立在 arm64 上的 Node 时会崩溃。

可以执行以下代码检查电脑上的 node 是不是运行在 arm64 上:

$ node

Welcome to Node.js v12.21.0.
Type ".help" for more information.
>
> process.arch
'arm64'

目前已经修复的Node版本:v15 及以上版本。

解决办法:

办法1:在 Rosetta 2 模式下用 nvm 安装 node

在 nvm github 官方库里的一个 issue 里有很好的解答:

 回答中写道:这种方式是只在需要的时候使用 Rosetta 模式,而不需要整个终端进入 Rosetta 模式。

什么是 Rosetta 2 模式?

简单来说,其实就是M1芯片在过渡期间苹果给出的对应 X86芯片的兼容性方案。

在终端输入 arch -x86_64 zsh 回车进入Rosetta 2模式,然后就可以用 nvm install 安装 node 了(安装之前要把之前安装在 arm64 上的 node 版本卸载了。)。

每次用 nvm 安装 node 新版本前都需要先进入 Rosetta 2 模式。

$ nvm uninstall 14
$ arch -x86_64 zsh 
$ nvm install 14

删除项目中原来的 node_modules,重新 npm i。

办法2: 升级node版本到已修复的版本。

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在M1芯片的计算机上安装Node.js,您可以按照以下步骤进行操作: 1. 首先,您需要安装nvm(Node Version Manager)来管理多个Node.js版本。使用以下命令安装nvm: ```shell curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash ``` 安装完成后,您可以在终端中运行`nvm --version`验证nvm是否成功安装。 2. 接下来,您可以使用nvm安装所需的Node.js版本。例如,如果您想安装Node.js 14.17.6版本,可以使用以下命令: ```shell nvm install v14.17.6 ``` 这将自动下载和安装Node.js 14.17.6版本。 3. 安装完成后,您可以使用以下命令验证Node.js是否成功安装: ```shell node --version ``` 请注意,在M1芯片Mac电脑上安装Node.js可能需要使用Rosetta终端来执行安装指令。您可以在Rosetta终端中重启终端,并按照上述步骤重新执行安装命令。 这样,您就可以在M1芯片的计算机上成功安装Node.js了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [m1芯片brew安装nodejs](https://blog.csdn.net/kanhcj86/article/details/130736039)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [M1芯片 nvm 安装低于16版本的node环境](https://blog.csdn.net/u010911649/article/details/130767176)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值