如何用npm清理(删除内容)文件夹

Pab*_*blo 16 deployment npm

我正在尝试部署一个Web项目,为此,在构建它之前,我需要清除该dist文件夹.

当然我可以添加一个可以运行的脚本,rm -rf dist/*但是一些Windows用户将无法运行它.

是否有一些npm包会删除带有命令的文件夹?

Maa*_*ope 16

npm install --save-dev del-cli 

"scripts": {
    "delete": "del-cli --force ../folder-to-delete"
}
Run Code Online (Sandbox Code Playgroud)

当您要删除父文件夹时请注意“--force”


Rya*_*Zim 10

您可以使用rimraf:https://github.com/isaacs/rimraf.

请注意,如果您使用包含globstar(**)的globs ,则必须对它们进行双引号.Unix系统默认不支持globstar,但rimraf会为你扩展它们.Windows不支持单引号,因此无法使用.请记住,必须使用a在JSON中转义双引号\.

  • 从 npm 5.2.0 开始,我们可以使用 `"clean": "npx rimraf dist"` (在 package.json 的“scripts”中) (7认同)
  • @dhilt 不需要在 npm 脚本中使用 `npx`;所有已安装的模块都已在那里可用。(即应该是 `"clean": "rimraf dist"`)`npx` 仅在从命令行手动运行模块时需要。 (6认同)
  • 项目 [`trash`](https://github.com/sindresorhus/trash) 和 `del` 也支持 globs;我建议使用`trash`,除非你*真的*确定要永久删除。 (2认同)

Tha*_*ius 6

最近,我面临着与您一样的挑战,就像用户Kevin Kevin在上面的评论中所说的那样,我对不仅仅是“使用此npm软件包”的解决方案感兴趣。因此,我将其扔在这里,希望有人会发现它有用。

因此,我所做的就是获取在StackOverflow中找到的一些代码,将其放在.js文件中,并将其绑定到package.json中的npm脚本中。在我的情况下,目标是删除编译.ts脚本的“ / out”文件夹,但可能性无穷!

使用此解决方案,您只需使用“ npm run cleanstart”启动应用程序。

package.json

{
    "name": "my_app",
    "version": "1.0.0",
    "main": "main.js",
    "scripts": {
        "tsc": "tsc",
        "precleanstart": "node clean.js",
        "cleanstart": "npm start",
        "prestart": "npm run tsc",
        "start": "node out/main.js"
    },
    "dependencies": {
        "@babel/runtime": "^7.0.0-beta.54",
        "babel-runtime": "^6.26.0",
        "body-parser": "^1.18.3",
        "express": "^4.16.3",
        "typescript": "^3.0.3"
    }
}
Run Code Online (Sandbox Code Playgroud)

clean.js

var fs = require('fs');

function deleteFolderRecursive(path) {
  if (fs.existsSync(path) && fs.lstatSync(path).isDirectory()) {
    fs.readdirSync(path).forEach(function(file, index){
      var curPath = path + "/" + file;

      if (fs.lstatSync(curPath).isDirectory()) { // recurse
        deleteFolderRecursive(curPath);
      } else { // delete file
        fs.unlinkSync(curPath);
      }
    });

    console.log(`Deleting directory "${path}"...`);
    fs.rmdirSync(path);
  }
};

console.log("Cleaning working tree...");

deleteFolderRecursive("./out");

console.log("Successfully cleaned working tree!");
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,应该是最佳答案 (2认同)
  • 我将其重构为在 cli 环境中使用。用法是node clean.js path1 path2等等...请参阅我的代码要点:https://gist.github.com/Drecu/4848ac433db380fe2180118919fc4b81 (2认同)