Command lime是一个jQuery插件,用于创建一个终端界面,在这里您可以展示CLI应用程序在终端中的工作方式
1.在页面上包括所需的jQuery库和终端仿真器。
<!-- jQuery --> <script src="/path/to/cdn/jquery.slim.min.js"></script> <!-- Terminal Emulator --> <link rel="stylesheet" href="/path/to/cdn/jquery.terminal.min.css" /> <script src="/path/to/cdn/jquery.terminal.min.js"></script>
2.在页面中下载并加载Command lime的JavaScript和CSS文件。
<link rel="stylesheet" href="dist/command-lime.min.css" /> <script src="dist/command-lime.min.js"></script>
3.为Command lime创建一个容器,并在数据标题
.
<div id="term-demo" class="example" data-title="jQueryScript CLI"> </div>
4.使用以下自定义提示、命令、输出和功能创建自己的分步教程:
function outputMkdir(folder) { if (folder.indexOf('-h') > -1 || folder.indexOf('--help') > -1) { return false; } if (folder.length !== 1) { this.echo($.cliLit.txt.red('mkdir expect a single variable')); return false; } availableFolders.push(folder[0]); return $.cliLit.txt.green('folder created'); } function outputCd(params) { if (params.length !== 1) { this.echo($.cliLit.txt.red('cd expect a single variable')); return false; } if (!_.includes(availableFolders, params[0])) { this.echo($.cliLit.txt.red(`no folder named "${params[0]}" found`)); return false; } folderName = params[0]; } function outputNpmInit() { return `This utility will walk you through creating a package.json file. It only covers the most common items, and tries to guess sensible defaults. See \`npm help json\` for definitive documentation on these fields and exactly what they do. Use \`npm install <pkg> --save\` afterwards to install a package and save it as a dependency in the package.json file. Press ^C at any time to quit.`; } function outputNpmInitName(params) { params = params.length ? params : [folderName]; let joined = params.join(' '); if ((/[A-Z]/gm).test(joined)) { this.echo($.cliLit.txt.red('Sorry, name can no longer contain capital letters.')); return false; } if (!(/^[a-zA-Z0-9_-]*$/gm).test(joined)) { this.echo($.cliLit.txt.red('Sorry, name can only contain URL-friendly characters.')); return false; } } function outputPrompt() { return $.cliLit.txt.red(`~${folderName ? '/' + folderName : ''}`) + $.cliLit.txt.green(' > '); } $('#term-demo').terminalOnboarding([{ name: 'demo CLI - create project', greetings: 'Hello there! please run `mkdir` with a folder name to continue', prompt: outputPrompt, command: 'mkdir *', output: outputMkdir }, { name: 'demo CLI - go into project', greetings: () => `now that you created your folder, please go into it with "cd ${availableFolders[0]}"`, prompt: outputPrompt, command: 'cd *', output: outputCd }, { name: 'demo CLI - initialize project', greetings: 'please initialize your project with `npm init`', prompt: outputPrompt, command: 'npm init', output: outputNpmInit }, { prompt: () => `name: (${folderName}) `, command: '*', output: outputNpmInitName }, { prompt: 'version: (1.0.0) ', command: '*', output: function(params) { params = params.length ? params : ['1.0.0']; if (!semverRegex().test(params.join(' '))) { this.echo($.cliLit.txt.red('version must be in a semver schema')); return false; } } }, { prompt: 'description: ', command: '' }, { prompt: 'git repository: ', command: '' }, { prompt: 'keywords: ', command: '' }, { prompt: 'author: ', command: '' }, { prompt: 'license: (ISC) ', command: '' }, { prompt: `About to write to /Users/nkalman/Development/aaaaaaa/package.json: { "name": "my-thing", "version": "1.0.0", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "dependencies": {}, "devDependencies": {}, "description": "" } Is this ok? (yes) `, command: '' }, { name: 'install project dependencies', clear: false, greetings: 'let\'s install our dependencies with `npm install`', prompt: outputPrompt, command: 'npm install *', output: function(params) { if (params.length > 2) { this.echo('got these params: ' + params.toString()); this.echo($.cliLit.txt.red('please run npm install without any parameters')); return false; } this.echo($.cliLit.txt.green(`all dependencies installed`)); this.echo($.cliLit.txt.blue(`\n~= Thank you for onboarding! =~`)); return true; } } ], { height: 250, clearOnEveryStep: false });