windows 跨平台“rm”命令

kxxlusnw  于 2023-01-18  发布在  Windows
关注(0)|答案(5)|浏览(350)

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

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

由于我正在散列所有的构建文件,所以在添加新的构建文件之前,我需要将它们全部删除,这样我就不会以一堆旧的构建结束。
有没有一个“rm bundles/*.js”可以同时在Mac和Windows中使用?

ajsxfq5m

ajsxfq5m1#

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,0004,000 5,000个s。
hk8txs48

hk8txs482#

看一看shelljs
ShellJS是一个基于Node.js API的Unix shell命令的可移植(Windows/Linux/OS X)实现。您可以使用它来消除shell脚本对Unix的依赖,同时仍然保留其熟悉而强大的命令。您还可以全局安装它,以便从Node项目之外运行它--告别那些粗糙的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添加到系统中
1.使用npm i --save-dev grunt grunt-contrib-clean将所需的包添加到项目中
1.创建名为gruntfile.js的文件
1.添加以下行:

module.exports = (grunt) => {
  'use strict';

  grunt.initConfig({
    clean: ['bundles'],
  });

  grunt.loadNpmTasks('grunt-contrib-clean');

  grunt.registerTask('default', ['clean']);
};

1.更新您的脚本"build": "grunt && webpack"

jjjwad0x

jjjwad0x3#

跨平台,无依赖性

如果您和我一样,不想添加11个依赖项来删除一个目录,那么可以使用节点退出代码来有条件地运行脚本:

例如,删除./dist文件夹

{
  "scripts": {
    "clean": "npm run clean:win && npm run clean:lin",
    "clean:win": "node -e \"if (process.platform === 'win32') process.exit(1)\" || , if exist dist rmdir /Q /S dist",
    "clean:lin": "node -e \"if (process.platform !== 'win32') process.exit(1)\" || rm -rf dist",
  }
}
npm run clean
pobjuy32

pobjuy324#

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

{
  "scripts": {
    "build": "(rm bundles/*.js || del bundles/*.js) && webpack",
  },
}
kfgdxczn

kfgdxczn5#

更新recursive-fs添加了用于删除文件夹的CLI,因此您现在可以执行以下操作:

"scripts": {
    "clean": "recursive-delete \"./bundles\""
}

原件:如果您决定删除单个文件夹不需要额外的11个包,可以使用recursive-fs和一个简短的脚本:

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

或者,有人可以编写一个NPM包来实现这一点,并且对recursive-fs只有一个依赖项,这仍然比rimraf少9个包。另一个选择是派生recursive-fs并发布一个NPM包,其中包含一个CLI,使使用它进行递归删除更容易。

相关问题