跨平台" rm"命令

时间:2018-01-05 20:33:08

标签: node.js windows macos

我目前在package.json中有以下脚本用于删除所有" .js"我的捆绑文件夹中的文件,用于运行" npm run build"。它在开发服务器中运行时工作正常,但在Windows机器上运行时会中断。

{
  "scripts": {
    "build": "rm bundles/*.js && webpack",
  },
}

由于我正在对所有构建文件进行哈希处理,因此我需要在添加新构建文件之前将其全部删除,这样我就不会得到一堆旧版本。

是否有" rm捆绑/ * .js"哪个适用于Mac和Windows?

4 个答案:

答案 0 :(得分:6)

看看shelljs

  

ShellJS是Unix的可移植(Windows / Linux / OS X)实现   在Node.js API之上的shell命令。你可以用它来消除   你的shell脚本依赖于Unix,同时仍然保留它   熟悉而强大的命令。您也可以全局安装它   你可以从Node项目外部运行它 - 告别那些   gnarly Bash脚本!

进一步到shelljs/shx,它提供了以下示例:

{
  "scripts": {
    "clean": "shx rm -rf build dist && shx echo Done"
  }
}

替代方案:

您可能还想查看GulpGrunt这两个所谓的任务运行者。 Gulp有gulp-clean,Grunt有grunt-contrib-clean。两者都旨在删除文件夹和/或文件。

让我们以Grunt为例:

  1. 将带有npm i -g grunt-cli的Grunt CLI添加到您的系统
  2. 使用npm i --save-dev grunt grunt-contrib-clean
  3. 将所需的软件包添加到项目中
  4. 创建名为gruntfile.js
  5. 的文件
  6. 添加以下行:
  7. module.exports = (grunt) => {
      'use strict';
    
      grunt.initConfig({
        clean: ['bundles'],
      });
    
      grunt.loadNpmTasks('grunt-contrib-clean');
    
      grunt.registerTask('default', ['clean']);
    };
    
    1. 更新您的脚本"build": "grunt && webpack"

答案 1 :(得分:2)

npm软件包 rimraf 可用于scripts中的命令行使用。

首先在本地安装到您的项目中

$ npm install --save-dev rimraf

然后更新 package.json 文件中的build脚本:

"scripts": {
   "prebuild": "rimraf bundles/*.js",
   "build": "webpack"
}

rimraf 命令(以rm -rf命名)删除文件。

文档:
https://www.npmjs.com/package/rimraf#cli

rimraf 是一个完善的项目,在GitHub上有超过3,000⭐。

答案 2 :(得分:1)

如果您不关心“rm/del not found”console.log,这里是简短而简单的解决方案,不需要额外的依赖项,rm 适用于 Mac 和 Linux,del 适用于 Windows:

filenames <- list.files(path=mypath, full.names=TRUE)

#read the files in as plaintext
csv_list <- lapply(filenames , readLines)

#remove the header from all but the first file
csv_list[-1] <- sapply(csv_list[-1], "[", 2)

#unlist to create a character vector
csv_list <- unlist(csv_list)

#write the csv as one single file
writeLines(text=csv_list,
           con="all_my_csvs_combined.csv")
           )

#read the csv as one single file
all_my_csvs_combined <- read.csv("all_my_csvs_combined.csv")

答案 3 :(得分:0)

如果您确定只需要删除一个文件夹就不需要11个其他软件包,则可以使用recursive-fs和一个简短脚本:

node -e \"require('recursive-fs').rmdirr(require('path').resolve('bundles'), ()=>{})\"

或者,有人可以编写一个执行此操作的NPM软件包,并且仅对recursive-fs有一个依赖性,这仍然会使它比rimraf少9个软件包。另一种选择是派生recursive-fs并发布一个包含CLI的NPM程序包,从而使其更易于进行递归删除。