我想为每个子模块缓存节点模块。我怎么能这样做?例如,我有以下目录结构:
/test1/node_modules
/test2/node_modules
如何tar主目录下的每个节点模块目录,以便我可以拥有一个具有以下结构的zip文件
/test1/node_modules
/test2/node_modules
我的意思是我想获取主目录下的所有node_modules目录。 node_modules目录可以在目录test1或test2或test3下。我希望得到所有这些并压缩它们,维护目录结构。因此,在zip文件中,它们将是test1/node_modules
,test2/node_modules
...但我也想要一个“全能”解决方案......每个node_modules
目录应该在我的焦油中。
答案 0 :(得分:0)
目前还不清楚你被封锁的地方。我将如何做到这一点:
# create my.tar
tar cf my.tar /test1/node_modules/*
# add second directory with tar uf
tar uf my.tar /test2/node_modules/*
如果您有超过test1
& test2
,但希望拥有所有test
dirs:
tar cf my.tar /test*/node_modules/
如果你想要每个node_modules
,那么使用一个find命令,用你的tar命令管道
find / -type d -name node_modules | xargs tar cf my.tar
答案 1 :(得分:0)
假设您有这些node_modules
➦ tree ./
./
├── pack.js
├── test1
│ └── node_modules
│ └── a
└── test2
└── node_modules
└── b
4 directories, 3 files
您可以使用节点脚本打包文件。 /^test\d+/
表示test1 test2 test3等。
'use strict';
const fstream = require('fstream');
const zlib = require('zlib');
const tar = require('tar');
const path = require('path');
const dist = path.join(__dirname, 'all.tgz');
fstream.Reader({
path: __dirname,
filter() {
return this.path === __dirname ||
path.relative(__dirname, this.path).match(/^test\d+/);
},
})
.pipe(tar.Pack({ fromBase: true }))
.pipe(zlib.createGzip())
.pipe(fstream.Writer(dist));
运行node pack.js
,所有node_modules目录将在一个文件all.tgz中。
vim all.tgz
" tar.vim version v29
" Browsing tarfile
" Select a file with cursor and press ENTER
/
test1/
test1/node_modules/
test1/node_modules/a
test2/
test2/node_modules/
test2/node_modules/b