博客> KoaHub.JS用于Node.js的可移植Unix shell命令程序代码
KoaHub.JS用于Node.js的可移植Unix shell命令程序代码
2019-10-12 01:21 评论:0 阅读:724 wemallshop
Node.js Koa.js KoaHub.js

shelljs

Portable Unix shell commands for Node.js ShellJS - Unix shell commands for Node.js

ShellJS is a portable (Windows/Linux/OS X) implementation of Unix shell commands on top of the Node.js API. You can use it to eliminate your shell script's dependency on Unix while still keeping its familiar and powerful commands. You can also install it globally so you can run it from outside Node projects - say goodbye to those gnarly Bash scripts! ShellJS supports node v0.11, v0.12, v4, v5, v6, and all releases of iojs. The project is unit-tested and battled-tested in projects like:

  • PDF.js - Firefox's next-gen PDF reader
  • Firebug - Firefox's infamous debugger
  • JSHint - Most popular JavaScript linter
  • Zepto - jQuery-compatible JavaScript library for modern browsers
  • Yeoman - Web application stack and development tool
  • Deployd.com - Open source PaaS for quick API backend generation
  • And many more.

If you have feedback, suggestions, or need help, feel free to post in our issue tracker. Think ShellJS is cool? Check out some related projects (like cash--a javascript-based POSIX shell) in our Wiki page! Upgrading from an older version? Check out our breaking changes page to see what changes to watch out for while upgrading. Command line use If you just want cross platform UNIX commands, checkout our new project shelljs/shx, a utility to expose shelljs to the command line. For example:

$ shx mkdir -p foo
$ shx touch foo/bar.txt
$ shx rm -rf foo

A quick note about the docs For documentation on all the latest features, check out our README. To read docs that are consistent with the latest release, check out the npm page or shelljs.org. Installing Via npm:

$ npm install [-g] shelljs

If the global option -g is specified, the binary shjs will be installed. This makes it possible to run ShellJS scripts much like any shell script from the command line, i.e. without requiring a node_modules folder:

$ shjs my_script

Examples JavaScript

require('shelljs/global');

if (!which('git')) {
  echo('Sorry, this script requires git');
  exit(1);
}

// Copy files to release dir 
rm('-rf', 'out/Release');
cp('-R', 'stuff/', 'out/Release');

// Replace macros in each .js file 
cd('lib');
ls('*.js').forEach(function(file) {
  sed('-i', 'BUILD_VERSION', 'v0.1.2', file);
  sed('-i', /^.*REMOVE_THIS_LINE.*$/, '', file);
  sed('-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, cat('macro.js'), file);
});
cd('..');

// Run external tool synchronously 
if (exec('git commit -am "Auto-commit"').code !== 0) {
  echo('Error: Git commit failed');
  exit(1);
}

CoffeeScript

CoffeeScript is also supported automatically:

require 'shelljs/global'

if not which 'git'
  echo 'Sorry, this script requires git'
  exit 1

# Copy files to release dir 
rm '-rf', 'out/Release'
cp '-R', 'stuff/', 'out/Release'

# Replace macros in each .js file 
cd 'lib'
for file in ls '*.js'
  sed '-i', 'BUILD_VERSION', 'v0.1.2', file
  sed '-i', /^.*REMOVE_THIS_LINE.*$/, '', file
  sed '-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, cat('macro.js'), file
cd '..'

# Run external tool synchronously 
if (exec 'git commit -am "Auto-commit"').code != 0
  echo 'Error: Git commit failed'
  exit 1

Global vs. Local The example above uses the convenience script shelljs/global to reduce verbosity. If polluting your global namespace is not desirable, simply requireshelljs. Example:

var shell = require('shelljs');
shell.echo('hello world');

Command reference All commands run synchronously, unless otherwise stated. All commands accept standard bash globbing characters (, ?, etc.), compatible with thenode glob module. For less-commonly used commands and features, please check out our wiki page. cd([dir])*

Changes to directory dir for the duration of the script. Changes to home directory if no argument is supplied. pwd()

Returns the current directory. ls([options,] [path, ...])

ls([options,] path_array)

Available options:

  • -R: recursive
  • -A: all files (include files beginning with ., except for . and ..)
  • -d: list directories themselves, not their contents
  • -l: list objects representing each file, each with fields containing ls -l output fields. See fs.Stats for more info

Examples:

ls('projs/*.js');
ls('-R', '/users/me', '/tmp');
ls('-R', ['/users/me', '/tmp']); // same as above 
ls('-l', 'file.txt'); // { name: 'file.txt', mode: 33188, nlink: 1, ...} 

Returns array of files in the given path, or in current directory if no path provided. find(path [, path ...])

find(path_array)

Examples:

find('src', 'lib');
find(['src', 'lib']); // same as above 
find('.').filter(function(file) { return file.match(/\.js$/); });

Returns array of all files (however deep) in the given paths. The main difference from ls('-R', path) is that the resulting file names include the base directories, e.g. lib/resources/file1 instead of just file1. cp([options,] source [, source ...], dest)

cp([options,] source_array, dest)

Available options:

  • -f: force (default behavior)
  • -n: no-clobber
  • -r, -R: recursive
  • -L: follow symlinks
  • -P: don't follow symlinks

Examples:

cp('file1', 'dir1');
cp('-R', 'path/to/dir/', '~/newCopy/');
cp('-Rf', '/tmp/*', '/usr/local/*', '/home/tmp');
cp('-Rf', ['/tmp/*', '/usr/local/*'], '/home/tmp'); // same as above 

Copies files. rm([options,] file [, file ...])

rm([options,] file_array)

Available options: -f: force -r, -R: recursive Examples:

rm('-rf', '/tmp/*');
rm('some_file.txt', 'another_file.txt');
rm(['some_file.txt', 'another_file.txt']); // same as above 

Removes files. mv([options ,] source [, source ...], dest')

mv([options ,] source_array, dest')

Available options:

  • -f: force (default behavior)
  • -n: no-clobber

Examples:

mv('-n', 'file', 'dir/');
mv('file1', 'file2', 'dir/');
mv(['file1', 'file2'], 'dir/'); // same as above 

Moves files. mkdir([options,] dir [, dir ...])

mkdir([options,] dir_array)

Available options: -p: full path (will create intermediate dirs if necessary) Examples:

mkdir('-p', '/tmp/a/b/c/d', '/tmp/e/f/g');
mkdir('-p', ['/tmp/a/b/c/d', '/tmp/e/f/g']); // same as above 

Creates directories. test(expression)

Available expression primaries:

  • '-b', 'path': true if path is a block device
  • '-c', 'path': true if path is a character device
  • '-d', 'path': true if path is a directory
  • '-e', 'path': true if path exists
  • '-f', 'path': true if path is a regular file
  • '-L', 'path': true if path is a symbolic link
  • '-p', 'path': true if path is a pipe (FIFO)
  • '-S', 'path': true if path is a socket

Examples:

if (test('-d', path)) { /* do something with dir */ };

wemall 开源微商城 ,微信商城,商城源码,三级分销,微生鲜,微水果,微外卖,微订餐---专业的o2o系统 wemall地址:http://www.wemallshop.com 代码地址:http://js.koahub.com/home/feature/shelljs

收藏
0
sina weixin mail 回到顶部