Nodejs 打包只运行 Npm 项目,你们用什么打包?
顺便问个问题:
常规来说,在 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),然后可以在其他机器上解压并安装。
- 在项目根目录下运行
npm pack
命令,生成一个.tgz文件。 - 将.tgz文件传输到目标机器,并解压。
- 在解压后的目录中运行
npm install
安装依赖。 - 使用
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文件了。