Windowsでシェルスクリプト書きたいときはShellJSが使える
久々のブログ更新となります。
シェルスクリプトをWindows用に移植したい・・・という場面でShellJSが便利だったというお話です。
ShellJSとは?
ヤツです。
採用実績
YeomanとかZeptoとかJS界隈の有名どころで使われています。
GitHubスター数も5,835(2017/05/03現在)なので結構人気あるライブラリと言ってよいのではないでしょうか。
自分は ESLintで使われていて知りました。
何で必要になった?
当初JSファイルをcatして結合するだけの単純なスクリプトをシェルスクリプトで書いてました(LinuxとWindows(MSYS2)だけで動けばよい)
ところが、Windowsでコマンドプロンプト使っている人が・・・
コマンドプロンプト用にバッチファイル書いて二重管理とかアレだなぁと思っていたところ、ふと存在を思い出しました。
イメージ
https://github.com/shelljs/shelljs の例そのままですが、↓のようなノリで書けます。
var shell = require('shelljs'); if (!shell.which('git')) { shell.echo('Sorry, this script requires git'); shell.exit(1); } // Copy files to release dir shell.rm('-rf', 'out/Release'); shell.cp('-R', 'stuff/', 'out/Release'); // Replace macros in each .js file shell.cd('lib'); shell.ls('*.js').forEach(function (file) { shell.sed('-i', 'BUILD_VERSION', 'v0.1.2', file); shell.sed('-i', /^.*REMOVE_THIS_LINE.*$/, '', file); shell.sed('-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, shell.cat('macro.js'), file); }); shell.cd('..'); // Run external tool synchronously if (shell.exec('git commit -am "Auto-commit"').code !== 0) { shell.echo('Error: Git commit failed'); shell.exit(1); }
自分の場合
catして結合したテキストをgrep -vして書き出すスクリプトがこう変わりました。
シェルスクリプト版
cat src/*.js | grep -vE '^\s*//.+' > target/bundle.js
↓
ShellJS版
※ npm install shelljs
でインストールしておく。この辺のNode.jsの説明は省略。
const shell = require('shelljs'); shell.cat('src/*.js').grep('-v', '^\s*//.+').to('target/bundle.js');
パイプもいい感じに書けます。