Nodejs 打包只运行 Npm 项目,你们用什么打包?

发布于 1周前 作者 songsunli 来自 nodejs/Nestjs

顺便问个问题:

常规来说,在 node 上运行的话打包成 commonjs 比较方便,也不用怎么考虑 node 版本兼容性。 但是随着越来越多依赖库的 Only ESM ,如果想用上最新版的依赖库,我能想到的解决办法:

  • 我自己的项目也 Only ESM ,但是对 node 就有一定的版本要求
  • 使用还有 commonJS 模块的低版本依赖库,但是有时候会有些 bug 和新功能用不上 [当前解决方式]
  • 将用到的依赖库在打包时也转成 commonJS ,有风险,不一定能转成功。
  • fork 低版本的 commonJS 模块的依赖库,自己维护依赖库,工作量比较大

思来想去,还是准备自己的项目在 major 版本 Only ESM ,node 的版本要求对项目影响不大

或者 v 友们还有什么更好的办法。

如果你也赞成 Only ESM 的话,有推荐的打包工具吗?项目只运行在 NodeJs 中


Nodejs 打包只运行 Npm 项目,你们用什么打包?

1 回复

在Node.js项目中,打包并运行npm项目通常有多种方法,以下是几种常用的打包工具和方法:

一、使用npm pack

npm是Node.js的包管理工具,它允许你将项目打包成一个tarball文件(.tgz),然后可以在其他机器上解压并安装。

  1. 在项目根目录下运行npm pack命令,生成一个.tgz文件。
  2. 将.tgz文件传输到目标机器,并解压。
  3. 在解压后的目录中运行npm install安装依赖。
  4. 使用npm start运行项目(前提是package.json中有start脚本)。

二、使用archiver打包成zip文件

如果你需要将项目目录打包成一个.zip文件,可以使用archiver这个Node.js库。

首先,安装archiver和dayjs(用于处理日期):

npm install archiver dayjs

然后,可以使用以下代码将指定目录打包成.zip文件:

const archiver = require('archiver');
const fs = require('fs');
const path = require('path');
const dayjs = require('dayjs');

const output = fs.createWriteStream(path.join(__dirname, 'dist-' + dayjs().format('YYYYMMDDHHmm') + '.zip'));
const archive = archiver('zip', {
  zlib: { level: 9 } // Sets the compression level.
});

output.on('close', function() {
  console.log(archive.pointer() + ' total bytes');
  console.log('archiver has been finalized and the output file descriptor has closed.');
});

archive.pipe(output);
archive.directory('dist', false);
archive.finalize();

这样,你就可以将dist目录下的所有文件打包成一个.zip文件了。

回到顶部