ÀÖÓãµç¾º

½ÌÓýÐÐÒµA¹ÉIPOµÚÒ»¹É£¨¹ÉƱ´úÂë 003032£©

È«¹ú×Éѯ/ͶËßÈÈÏߣº400-618-4000

ʹÓà Node.js ¿ª·¢¼òµ¥µÄ½ÅÊּܹ¤¾ß

¸üÐÂʱ¼ä:2019Äê01ÔÂ10ÈÕ15ʱ14·Ö À´Ô´:ÀÖÓã²¥¿Í ä¯ÀÀ´ÎÊý:

ÏñÎÒÃÇÊìϤµÄ vue-cli£¬react-native-cli µÈ½ÅÊּܣ¬Ö»ÐèÒªÊäÈë¼òµ¥µÄÃüÁî vue init webpack project£¬¼´¿É¿ìËÙ°ïÎÒÃÇÉú³ÉÒ»¸ö³õʼÏîÄ¿¡£ÔÚʵ¼Ê¹¤×÷ÖУ¬ÎÒÃÇ¿ÉÒÔ¶¨ÖÆÒ»¸öÊôÓÚ×Ô¼ºµÄ½ÅÊּܣ¬À´Ìá¸ß×Ô¼ºµÄ¹¤×÷ЧÂÊ¡£

ΪʲôÐèÒªÐèÒª½ÅÊּܣ¿

¼õÉÙÖØ¸´ÐԵŤ×÷£¬²»ÔÙÐèÒª¸´ÖÆÆäËûÏîÄ¿ÔÙɾ³ýÎ޹شúÂ룬»òÕß´ÓÁã´´½¨Ò»¸öÏîÄ¿ºÍÎļþ¡£
¸ù¾Ý½»»¥¶¯Ì¬Éú³ÉÏîÄ¿½á¹¹ºÍÅäÖÃÎļþµÈ¡£
¶àÈËЭ×÷¸üΪ·½±ã£¬²»ÐèÒª°ÑÎļþ´«À´´«È¥¡£
˼·
Òª¿ª·¢½ÅÊּܣ¬Ê×ÏÈÒªÀíÇå˼·£¬½ÅÊÖ¼ÜÊÇÈçºÎ¹¤×÷µÄ£¿ÎÒÃÇ¿ÉÒÔ½è¼ø vue-cli µÄ»ù±¾Ë¼Â·¡£vue-cli Êǽ«ÏîĿģ°å·ÅÔÚ git ÉÏ£¬ÔËÐеÄʱºòÔÙ¸ù¾ÝÓû§½»»¥ÏÂÔØ²»Í¬µÄÄ£°å£¬¾­¹ýÄ£°åÒýÇæäÖȾ³öÀ´£¬Éú³ÉÏîÄ¿¡£ÕâÑù½«Ä£°åºÍ½ÅÊּܷÖÀ룬¾Í¿ÉÒÔ¸÷×Ôά»¤£¬¼´Ê¹Ä£°åÓб䶯£¬Ö»ÐèÒªÉÏ´«×îеÄÄ£°å¼´¿É£¬¶ø²»ÐèÒªÓû§È¥¸üнÅÊּܾͿÉÒÔÉú³É×îеÄÏîÄ¿¡£ÄÇô¾Í¿ÉÒÔ°´ÕÕÕâ¸ö˼·À´½øÐпª·¢ÁË¡£

µÚÈý·½¿â
Ê×ÏÈÀ´¿´¿´»áÓõ½ÄÄЩ¿â¡£

commander.js£¬¿ÉÒÔ×Ô¶¯µÄ½âÎöÃüÁîºÍ²ÎÊý£¬ÓÃÓÚ´¦ÀíÓû§ÊäÈëµÄÃüÁî¡£
download-git-repo£¬ÏÂÔØ²¢ÌáÈ¡ git ²Ö¿â£¬ÓÃÓÚÏÂÔØÏîĿģ°å¡£
Inquirer.js£¬Í¨ÓõÄÃüÁîÐÐÓû§½çÃæ¼¯ºÏ£¬ÓÃÓÚºÍÓû§½øÐн»»¥¡£
handlebars.js£¬Ä£°åÒýÇæ£¬½«Óû§Ìá½»µÄÐÅÏ¢¶¯Ì¬Ìî³äµ½ÎļþÖС£
ora£¬ÏÂÔØ¹ý³Ì¾ÃµÄ»°£¬¿ÉÒÔÓÃÓÚÏÔʾÏÂÔØÖе͝»­Ð§¹û¡£
chalk£¬¿ÉÒÔ¸øÖն˵Ä×ÖÌå¼ÓÉÏÑÕÉ«¡£
log-symbols£¬¿ÉÒÔÔÚÖÕ¶ËÉÏÏÔʾ³ö √ »ò × µÈµÄͼ±ê¡£
³õʼ»¯ÏîÄ¿
Ê×ÏÈ´´½¨Ò»¸ö¿ÕÏîÄ¿£¬ÔÝʱÃüÃûΪ okii-cli£¬È»ºóн¨Ò»¸ö index.js Îļþ£¬ÔÙÖ´ÐÐ npm init Éú³ÉÒ»¸ö package.json Îļþ¡£×îºó°²×°ÉÏÃæÐèÒªÓõ½µÄÒÀÀµ¡£

npm install commander download-git-repo inquirer handlebars ora chalk log-symbols -S
´¦ÀíÃüÁîÐÐ
node.js ÄÚÖÃÁ˶ÔÃüÁîÐвÙ×÷µÄÖ§³Ö£¬ÔÚ package.json ÖÐµÄ bin ×ֶοÉÒÔ¶¨ÒåÃüÁîÃûºÍ¹ØÁªµÄÖ´ÐÐÎļþ¡£ËùÒÔÏÖÔÚ package.json ÖмÓÉÏ bin µÄÄÚÈÝ£º

{
  "name": "okii-cli",
  "version": "1.0.0",
  "description": "»ùÓÚnodeµÄ½ÅÊּܹ¤¾ß",
  "bin": {
    "okii": "index.js"
  },
  ...
}
È»ºóÔÚ index.js ÖÐÀ´¶¨Òå init ÃüÁ

#!/usr/bin/env node
const program = require('commander');
program.version('1.0.0', '-v, --version')
       .command('init <name>')
       .action((name) => {
           console.log(name);
       });
program.parse(process.argv);
µ÷Óà version('1.0.0', '-v, --version') »á½« -v ºÍ –version Ìí¼Óµ½ÃüÁîÖУ¬¿ÉÒÔͨ¹ýÕâЩѡÏî´òÓ¡³ö°æ±¾ºÅ¡£
µ÷Óà command('init <name>') ¶¨Òå init ÃüÁname ÔòÊDZش«µÄ²ÎÊý£¬ÎªÏîÄ¿Ãû¡£
action() ÔòÊÇÖ´ÐÐ init ÃüÁî»á·¢ÉúµÄÐÐΪ£¬ÒªÉú³ÉÏîÄ¿µÄ¹ý³Ì¾ÍÊÇÔÚÕâÀïÃæÖ´ÐеÄ£¬ÕâÀïÔÝʱֻ´òÓ¡³ö name¡£
Æäʵµ½ÕâÀÒѾ­¿ÉÒÔÖ´ÐÐ init ÃüÁîÁË¡£ÎÒÃÇÀ´²âÊÔһϣ¬ÔÚ okii-cli µÄͬ¼¶Ä¿Â¼ÏÂÖ´ÐУº

node ./okii-cli/index.js init HelloWorld
¿ÉÒÔ¿´µ½ÃüÁîÐй¤¾ßÒ²´òÓ¡³öÁË HelloWorld£¬ÄÇôºÜÇå³þ£¬ action((name) => {}) ÕâÀïµÄ²ÎÊý name£¬¾ÍÊÇÎÒÃÇÖ´ÐÐ init ÃüÁîʱÊäÈëµÄÏîÄ¿Ãû³Æ¡£

ÃüÁîÒѾ­Íê³É£¬½ÓÏÂÀ´¾ÍÒªÏÂÔØÄ£°åÉú³ÉÏîÄ¿½á¹¹ÁË¡£

ÏÂÔØÄ£°å
download-git-repo Ö§³Ö´Ó Github¡¢Gitlab ºÍ Bitbucket ÏÂÔØ²Ö¿â£¬¸÷×ԵľßÌåÓ÷¨¿ÉÒԲο¼¹Ù·½Îĵµ¡£

ÓÉÓÚÊǹ«Ë¾ÏîÄ¿£¬ËùÒÔ°ÑÄ£°å²Ö¿â·ÅÔÚÁË Gitlab ÉÏ£¬ÄÇôÔÚ action() ÖнøÐвÙ×÷ÏÂÔØÄ£°å£º

#!/usr/bin/env node
const program = require('commander');
const download = require('download-git-repo');
program.version('1.0.0', '-v, --version')
       .command('init <name>')
       .action((name) => {
           download('http://xxxxxx:9999:HTML5/H5Template#master', name, {clone: true}, (err) => {
                                console.log(err ? 'Error' : 'Success')
                   })
       });
program.parse(process.argv);
download() µÚÒ»¸ö²ÎÊý¾ÍÊÇ²Ö¿âµØÖ·£¬µ«ÊÇÓÐÒ»µãµã²»Ò»Ñù¡£Êµ¼ÊµÄ²Ö¿âµØÖ·ÊÇ http://xxxxxx:9999/HTML5/H5Template#master £¬¿ÉÒÔ¿´µ½¶Ë¿ÚºÅºóÃæµÄ ‘/‘ ÔÚ²ÎÊýÖÐҪд³É ‘:’£¬#master ´ú±íµÄ¾ÍÊÇ·ÖÖ§Ãû£¬²»Í¬µÄÄ£°å¿ÉÒÔ·ÅÔÚ²»Í¬µÄ·ÖÖ§ÖУ¬¸ü¸Ä·ÖÖ§±ã¿ÉÒÔʵÏÖÏÂÔØ²»Í¬µÄÄ£°åÎļþÁË¡£µÚ¶þ¸ö²ÎÊýÊÇ·¾¶£¬ÉÏÃæÎÒÃÇÖ±½ÓÔÚµ±Ç°Â·¾¶Ï´´½¨Ò»¸ö name µÄÎļþ¼Ð´æ·ÅÄ£°å£¬Ò²¿ÉÒÔʹÓöþ¼¶Ä¿Â¼±ÈÈç test/${name}

ÃüÁîÐн»»¥
ÃüÁîÐн»»¥¹¦ÄÜ¿ÉÒÔÔÚÓû§Ö´ÐÐ init ÃüÁîºó£¬ÏòÓû§Ìá³öÎÊÌ⣬½ÓÊÕÓû§µÄÊäÈë²¢×÷³öÏàÓ¦µÄ´¦Àí¡£ÕâÀïʹÓà inquirer.js À´ÊµÏÖ¡£

const inquirer = require('inquirer');
inquirer.prompt([
        {
                type: 'input',
                name: 'author',
                message: 'ÇëÊäÈë×÷ÕßÃû³Æ'
        }
]).then((answers) => {
        console.log(answers.author);
})
ͨ¹ýÕâÀïÀý×Ó¿ÉÒÔ¿´³ö£¬ÎÊÌâ¾Í·ÅÔÚ prompt() ÖУ¬ÎÊÌâµÄÀàÐÍΪ input ¾ÍÊÇÊäÈëÀàÐÍ£¬name ¾ÍÊÇ×÷Ϊ´ð°¸¶ÔÏóÖÐµÄ key£¬message ¾ÍÊÇÎÊÌâÁË£¬Óû§ÊäÈëµÄ´ð°¸¾ÍÔÚ answers ÖУ¬Ê¹ÓÃÆðÀ´¾ÍÊÇÕâô¼òµ¥¡£¸ü¶àµÄ²ÎÊýÉèÖÿÉÒԲο¼¹Ù·½Îĵµ¡£

ͨ¹ýÃüÁîÐн»»¥£¬»ñµÃÓû§µÄÊäÈ룬´Ó¶ø¿ÉÒÔ°Ñ´ð°¸äÖȾµ½Ä£°åÖС£

äÖȾģ°å
ÕâÀïÓà handlebars µÄÓï·¨¶Ô HTML5/H5Template ²Ö¿âµÄÄ£°åÖÐµÄ package.json Îļþ×öһЩÐÞ¸Ä

{
  "name": "{{name}}",
  "version": "1.0.0",
  "description": "{{description}}",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "{{author}}",
  "license": "ISC"
}
²¢ÔÚÏÂÔØÄ£°åÍê³ÉÖ®ºó½«Óû§ÊäÈëµÄ´ð°¸äÖȾµ½ package.json ÖÐ

program.version('1.0.0', '-v, --version')
.command('init <name>')
.action((name) => {
        inquirer.prompt([
        {
                name: 'description',
                message: 'ÇëÊäÈëÏîÄ¿ÃèÊö'
        },
        {
                name: 'author',
                message: 'ÇëÊäÈë×÷ÕßÃû³Æ'
        }
        ]).then((answers) => {
                download('xxxxx#master',name,{clone: true},(err) => {
                        const meta = {
                                name,
                                description: answers.description,
                                author: answers.author
                        }
                        const fileName = `${name}/package.json`;
                        const content = fs.readFileSync(fileName).toString();
                        const result = handlebars.compile(content)(meta);
                        fs.writeFileSync(fileName, result);
                })
        })
});
ÕâÀïʹÓÃÁË node.js µÄÎļþÄ£¿é fs£¬½« handlebars äÖȾÍêºóµÄÄ£°åÖØÐÂдÈëµ½ÎļþÖС£

ÊÓ¾õÃÀ»¯
ÔÚÓû§ÊäÈë´ð°¸Ö®ºó£¬¿ªÊ¼ÏÂÔØÄ£°å£¬ÕâʱºòʹÓà ora À´ÌáʾÓû§ÕýÔÚÏÂÔØÖС£

const ora = require('ora');
// ¿ªÊ¼ÏÂÔØ
const spinner = ora('ÕýÔÚÏÂÔØÄ£°å...');
spinner.start();
// ÏÂÔØÊ§°Üµ÷ÓÃ
spinner.fail();
// ÏÂÔØ³É¹¦µ÷ÓÃ
spinner.succeed();
È»ºóͨ¹ý chalk À´Îª´òÓ¡ÐÅÏ¢¼ÓÉÏÑùʽ£¬±ÈÈç³É¹¦ÐÅϢΪÂÌÉ«£¬Ê§°ÜÐÅϢΪºìÉ«£¬ÕâÑù×Ó»áÈÃÓû§¸ü¼ÓÈÝÒ׷ֱ棬ͬʱҲÈÃÖն˵ÄÏÔʾ¸ü¼ÓµÄºÃ¿´¡£

const chalk = require('chalk');
console.log(chalk.green('ÏîÄ¿´´½¨³É¹¦'));
console.log(chalk.red('ÏîÄ¿´´½¨Ê§°Ü'));
³ýÁ˸ø´òÓ¡ÐÅÏ¢¼ÓÉÏÑÕɫ֮Í⣬»¹¿ÉÒÔʹÓà log-symbols ÔÚÐÅÏ¢Ç°Ãæ¼ÓÉÏ √ »ò × µÈµÄͼ±ê

const chalk = require('chalk');
const symbols = require('log-symbols');
console.log(symbols.success, chalk.green('ÏîÄ¿´´½¨³É¹¦'));
console.log(symbols.error, chalk.red('ÏîÄ¿´´½¨Ê§°Ü'));
ÍêÕûʾÀý
#!/usr/bin/env node
const fs = require('fs');
const program = require('commander');
const download = require('download-git-repo');
const handlebars = require('handlebars');
const inquirer = require('inquirer');
const ora = require('ora');
const chalk = require('chalk');
const symbols = require('log-symbols');
program.version('1.0.0', '-v, --version')
        .command('init <name>')
    .action((name) => {
        if(!fs.existsSync(name)){
            inquirer.prompt([
                                {
                                        name: 'description',
                                        message: 'ÇëÊäÈëÏîÄ¿ÃèÊö'
                                },
                                {
                                        name: 'author',
                                        message: 'ÇëÊäÈë×÷ÕßÃû³Æ'
                                }
            ]).then((answers) => {
                const spinner = ora('ÕýÔÚÏÂÔØÄ£°å...');
                spinner.start();
                                download('http://xxxxxx:9999:HTML5/H5Template#master', name, {clone: true}, (err) => {
                    if(err){
                        spinner.fail();
                        console.log(symbols.error, chalk.red(err));
                    }else{
                        spinner.succeed();
                        const fileName = `${name}/package.json`;
                        const meta = {
                            name,
                            description: answers.description,
                            author: answers.author
                        }
                        if(fs.existsSync(fileName)){
                            const content = fs.readFileSync(fileName).toString();
                            const result = handlebars.compile(content)(meta);
                            fs.writeFileSync(fileName, result);
                        }
                        console.log(symbols.success, chalk.green('ÏîÄ¿³õʼ»¯Íê³É'));
                    }
                })
            })
        }else{
            // ´íÎóÌáʾÏîÄ¿ÒÑ´æÔÚ£¬±ÜÃ⸲¸ÇÔ­ÓÐÏîÄ¿
            console.log(symbols.error, chalk.red('ÏîÄ¿ÒÑ´æÔÚ'));
        }
    })
program.parse(process.argv);
Ч¹ûÈçÏ£º


Íê³ÉÖ®ºó£¬¾Í¿ÉÒ԰ѽÅÊּܷ¢²¼µ½ npm ÉÏÃæ£¬Í¨¹ý -g ½øÐÐÈ«¾Ö°²×°£¬¾Í¿ÉÒÔÔÚ×Ô¼º±¾»úÉÏÖ´ÐÐ okii init [name] À´³õʼ»¯ÏîÄ¿£¬ÕâÑù±ãÍê³ÉÁËÒ»¸ö¼òµ¥µÄ½ÅÊּܹ¤¾ßÁË¡£

×÷ÕߣºÀÖÓã²¥¿Íǰ¶ËÓëÒÆ¶¯¿ª·¢ÅàѵѧԺ

Ê×·¢£º http://web.itcast.cn

0 ·ÖÏíµ½£º
ºÍÎÒÃÇÔÚÏß½»Ì¸£¡
¡¾ÍøÕ¾µØÍ¼¡¿¡¾sitemap¡¿