Вопрос:

кроссплатформенная команда "rm"

node.js windows macos

1847 просмотра

3 ответа

356 Репутация автора

В настоящее время у меня в файле package.json есть следующий скрипт для удаления всех файлов «.js» в папке с пакетами, когда я запускаю «npm run build». Он отлично работает при запуске его на серверах разработчиков, но не работает, когда он запускается на компьютере с Windows.

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

Так как я хэширую все свои файлы сборки, я должен удалить их все перед добавлением новых, так что я не получу кучу старых сборок.

Есть ли "rm bundles / *. Js", который будет работать как на Mac, так и на Windows?

Автор: jaimefps Источник Размещён: 05.01.2018 08:33

Ответы (3)


6 плюса

3502 Репутация автора

Решение

Посмотрите на shelljs :

ShellJS - это переносимая (Windows / Linux / OS X) реализация команд оболочки Unix поверх API-интерфейса Node.js. Вы можете использовать его, чтобы устранить зависимость вашего сценария оболочки от Unix, сохраняя при этом привычные и мощные команды. Вы также можете установить его глобально, чтобы запустить его из-за пределов Node-проектов - попрощайтесь с этими ужасными скриптами Bash!

И далее к shelljs / shx , который предоставляет следующий пример:

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

Альтернатива:

Вы также можете взглянуть на Gulp или Grunt , так называемых «Runner». Gulp - gulp-clean, а Grunt - grunt-contrib-clean . Оба стремятся удалить папки и / или файлы.

Давайте возьмем Grunt например:

  1. Добавьте Grunt CLI с npm i -g grunt-cliвашей системой
  2. Добавьте необходимые пакеты в ваш проект с помощью npm i --save-dev grunt grunt-contrib-clean
  3. Создайте файл с именем gruntfile.js
  4. Добавьте следующие строки:
module.exports = (grunt) => {
  'use strict';

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

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

  grunt.registerTask('default', ['clean']);
};
  1. Обновите ваш скрипт "build": "grunt && webpack"
Автор: pzaenger Размещён: 05.01.2018 08:45

2 плюса

2950 Репутация автора

Пакет npm rimraf доступен для использования в командной строке в scripts.

Сначала установите локально в ваш проект:

$ npm install --save-dev rimraf

Затем обновите buildскрипт в вашем файле package.json :

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

Команда rimraf (названная в честь rm -rf) удаляет файлы.

Документация:
https://www.npmjs.com/package/rimraf#cli

rimraf - это хорошо зарекомендовавший себя проект с более чем 3000 мкс на GitHub.

Автор: Dem Pilafian Размещён: 25.12.2018 06:54

0 плюса

3083 Репутация автора

Если вы решили, что вам не нужно 11 дополнительных пакетов только для удаления одной папки, вы можете использовать recursive-fs и короткий скрипт:

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

В качестве альтернативы, кто-то может написать пакет NPM, который делает это и имеет только одну зависимость recursive-fs, которая все равно будет на 9 пакетов меньше, чем rimraf. Другим вариантом может быть разветвление recursive-fsи публикация пакета NPM, который включает в себя CLI, что облегчает использование его для рекурсивных удалений.

Автор: Micah Zoltu Размещён: 25.01.2019 08:14
32x32