tag:github.com,2008:/just-talks/nodejs/discussions Recent discussions in just-talks/nodejs 2023-06-24T06:52:33+00:00 tag:github.com,2008:5332077 node 的包管理器:fnm 2023-06-24T06:52:32+00:00 2023-06-24T06:52:33+00:00 adoyle-h https://github.com/adoyle-h <p dir="auto"><a href="https://github.com/Schniz/fnm">https://github.com/Schniz/fnm</a> 是用 rust 实现的,比 nvm 快多了。<br> 我测了一下,加载 fnm 的 shell 启动脚本需要 25ms,而 nvm 的 shell 启动脚本需要 300ms。</p> <p dir="auto">另外它支持切换目录后识别 <code class="notranslate">.node-version</code> 或 <code class="notranslate">.nvmrc</code> 来自动切换当前的 node 版本。</p> tag:github.com,2008:5123695 NodeJS 18.16.0 支持了 SEA 2023-04-24T07:53:26+00:00 2023-04-24T07:53:27+00:00 adoyle-h https://github.com/adoyle-h <p dir="auto">2023-04-12 发布了 NodeJS 18.16.0,自此支持了 SEA 特性。<br> SEA 是 Single Executable Application 的缩写,意思是 nodejs 可以把项目所有文件编译成一个可执行文件。</p> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="$ echo 'console.log(`Hello, ${process.argv[2]}!`);' &gt; hello.js $ cp $(command -v node) hello # On systems other than macOS: $ npx postject hello NODE_JS_CODE hello.js \ --sentinel-fuse NODE_JS_FUSE_fce680ab2cc467b6e072b8b5df1996b2 # On macOS: $ npx postject hello NODE_JS_CODE hello.js \ --sentinel-fuse NODE_JS_FUSE_fce680ab2cc467b6e072b8b5df1996b2 \ --macho-segment-name NODE_JS $ ./hello world Hello, world!"><pre class="notranslate">$ <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>console.log(`Hello, ${process.argv[2]}!`);<span class="pl-pds">'</span></span> <span class="pl-k">&gt;</span> hello.js $ cp <span class="pl-s"><span class="pl-pds">$(</span>command -v node<span class="pl-pds">)</span></span> hello <span class="pl-c"><span class="pl-c">#</span> On systems other than macOS:</span> $ npx postject hello NODE_JS_CODE hello.js \ --sentinel-fuse NODE_JS_FUSE_fce680ab2cc467b6e072b8b5df1996b2 <span class="pl-c"><span class="pl-c">#</span> On macOS:</span> $ npx postject hello NODE_JS_CODE hello.js \ --sentinel-fuse NODE_JS_FUSE_fce680ab2cc467b6e072b8b5df1996b2 \ --macho-segment-name NODE_JS $ ./hello world Hello, world<span class="pl-k">!</span></pre></div> <p dir="auto">详见 <a href="https://github.com/nodejs/node/blob/main/doc/changelogs/CHANGELOG_V18.md#2023-04-12-version-18160-hydrogen-lts-danielleadams">changelog</a>。</p> <p dir="auto">原理大概是编译好的可执行文件里自带了虚拟文件系统,项目源码里的 .js, .json 这些文件统统序列化成二进制。参考资料:</p> <ul dir="auto"> <li><a href="https://github.com/nodejs/single-executable/blob/main/blog/2022-08-05-an-overview-of-the-current-state.md">https://github.com/nodejs/single-executable/blob/main/blog/2022-08-05-an-overview-of-the-current-state.md</a></li> <li><a href="https://github.com/nodejs/single-executable">https://github.com/nodejs/single-executable</a></li> <li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1411616479" data-permission-text="Title is private" data-url="https://github.com/nodejs/node/issues/45038" data-hovercard-type="pull_request" data-hovercard-url="/nodejs/node/pull/45038/hovercard" href="https://github.com/nodejs/node/pull/45038">nodejs/node#45038</a></li> </ul> tag:github.com,2008:4919319 Node 官方出品的包管理器的管理器:corepack 2023-03-02T18:02:36+00:00 2023-03-02T18:02:37+00:00 adoyle-h https://github.com/adoyle-h <p dir="auto"><a href="https://github.com/nodejs/corepack">https://github.com/nodejs/corepack</a></p> <p dir="auto">现在 node 生态的包管理器五花八门。npm,yarn1,yarn2,yarn3,yarn4(已经是 rc 版本),<a href="https://pnpm.js.org/" rel="nofollow">pnpm</a>……</p> <p dir="auto">corepack 可以帮你安装这些包管理器。不过目前只支持 yarn 和 pnpm。<br> corepack 可以使用<a href="https://github.com/nodejs/corepack#when-authoring-packages">在 package.json 中设定的包管理器版本</a>。</p> <p dir="auto">node 自 v14.19.0 和 v16.9.0 起就自带了 corepack ,之前的版本可以通过 <code class="notranslate">npm install -g corepack</code> 安装。</p> <p dir="auto">参考<a href="https://dev.to/cloudx/corepack-the-node-js-manager-of-package-managers-44dd" rel="nofollow">文章</a> (<a href="https://web.archive.org/web/20230213031857/https://dev.to/cloudx/corepack-the-node-js-manager-of-package-managers-44dd" rel="nofollow">链接备份</a>) ,需要翻墙访问。</p>