"闲着"没事,看到掘金推荐了一个用js写脚本的包,记录一下怎么使用
安装
npm zx -g
在自己项目里面创建一个 .mjs 文件 #!/usr/bin/env zx 写在顶部
#!/usr/bin/env zx
let dirName = 'temp'
// 创建文件夹
await $`mkdir ${dirName}`
// 进入文件夹
cd(`${dirName}`)
在使用的过程中发现代码没有提示感觉很不方便,去看了github上提的issue发现引用 zx/globals可以解决 前提是当前项目也要安装zx 不然import没提示
#!/usr/bin/env zx
import 'zx/globals'
let content = fs.readFileSync('./package.json')
let dependencies = JSON.parse(content.toString()).dependencies
console.log(dependencies)
但是在我循环创建文件夹的时,出现了点问题,不知道什么原因 设置了编码格式为utf8错误信息还是乱码
#!/usr/bin/env zx
import 'zx/globals'
await $`mkdir tmp`
cd('tmp')
let content = fs.readFileSync('./package.json')
let dependencies = JSON.parse(content.toString()).dependencies
console.log(dependencies)
Object.keys(dependencies).forEach(async (key, index) => {
await $`mkdir ${key}`
})
后来发现错误原因是因为文件夹名称使用了非法字符 但是报错乱码还是不知道为什么
#!/usr/bin/env zx
import 'zx/globals'
await $`mkdir tmp`
cd('tmp')
let content = fs.readFileSync('./package.json')
let dependencies = JSON.parse(content.toString()).dependencies
Object.keys(dependencies).forEach(async (key, index) => {
let regex = new RegExp('[\\\\/:*?"<>|]')
if (!regex.test(key)) {
await $`mkdir ${key}`
}
})
后来发现如果重复执行 会出现报错文件夹已存在 ,此时优化了一下代码
#!/usr/bin/env zx
import 'zx/globals'
let dirName = 'temp'
let hasFile = fs.existsSync(path.join(__dirname, `./${dirName}`))
if (!hasFile) await $`mkdir ${dirName}`
cd(`${dirName}`)
let content = fs.readFileSync('./package.json')
let dependencies = JSON.parse(content.toString()).dependencies
Object.keys(dependencies).forEach(async (key, index) => {
let regex = new RegExp('[\\\\/:*?"<>|]')
// 判断文件夹是否存在了
let ifFileExist = fs.existsSync(path.join(__dirname, `./${dirName}/${key}`))
if (!regex.test(key) && !ifFileExist) {
await $`mkdir ${key}`
}
})
ok
zx的其他命令有空再去看看