KoaHub.JS用于Node.js的可移植Unix shell命令程序代码


发布者 wemallshop  发布时间 1477557018231
关键字 分享 

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.11v0.12v4v5v6, 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

 









  开源的 OurJS
OurJS开源博客已经迁移到 OnceOA 平台。

  关注我们
扫一扫即可关注我们:
OnceJS

OnceOA