如何使用 npm 清理(删除内容)文件夹[关闭]

问题描述 投票:0回答:4

我正在尝试部署一个 Web 项目,但在

build
之前,我需要清除/删除
dist
文件夹。

我可以添加一个可以运行

rm -rf dist/*
的脚本,但这在 Windows 系统上不起作用。

是否有一些 npm 包和其他解决方案允许使用适用于每个操作系统的命令删除文件夹?

deployment npm
4个回答
64
投票

您可以使用

rimraf
https://github.com/isaacs/rimraf

请注意,如果您使用包含 globstar (

**
) 的 glob,则必须将它们加双引号。默认情况下,Unix 系统并不都支持 globstar,但是
rimraf
将为您扩展它们。 Windows 不支持单引号,因此不能使用单引号。请记住,双引号必须在 JSON 中使用
\
进行转义。


36
投票

最近我面临着和你一样的挑战,但我对一个不仅仅是“使用这个 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"
  }
}

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!');

30
投票
npm install --save-dev del-cli 

"scripts": {
    "delete": "del-cli --force ../folder-to-delete"
}

当你想删除父文件夹时请注意“--force”


2
投票

我今天发现了这个:

npm i clean-webpack-plugin --save-dev

plugins: [
    ...
    new CleanWebpackPlugin(['dist'])
 ]

仅供参考:https://www.npmjs.com/package/clean-webpack-plugin

© www.soinside.com 2019 - 2024. All rights reserved.