{"componentChunkName":"component---src-templates-blog-post-js","path":"/2021/06/06/脚手架开发：命令注册和参数解析/","result":{"data":{"site":{"siteMetadata":{"title":"CHENHUOJUN BLOG"}},"post":{"id":"1375905c-e812-5b04-9810-0b8e90a3c8ab","html":"<h2 id=\"动手实操node的process模块\" style=\"position:relative;\"><a href=\"#%E5%8A%A8%E6%89%8B%E5%AE%9E%E6%93%8Dnode%E7%9A%84process%E6%A8%A1%E5%9D%97\" aria-label=\"动手实操node的process模块 permalink\" class=\"auto-anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>动手实操node的process模块</h2>\n<p>index.js</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-text line-numbers\"><code class=\"language-text\">#!/usr/bin/env node\n\nlet argv = require(&#39;process&#39;).argv\nconsole.log(argv)</code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span><span></span></span></pre></div>\n<p>我们先运行脚手架 ：</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-text line-numbers\"><code class=\"language-text\">imooc-test-jun</code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span></span></pre></div>\n<p>看看打印结果：</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-text line-numbers\"><code class=\"language-text\">[ &#39;C:\\\\Program Files\\\\nodejs\\\\node.exe&#39;,\n  &#39;C:\\\\Users\\\\jun\\\\AppData\\\\Roaming\\\\npm\\\\node_modules\\\\imooc-test-jun\\\\bin\\\\index.js&#39; ]</code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span></span></pre></div>\n<p>打印出来是一个数组，数组第一个元素是node本身的执行路径，第二个数组是我们的脚手架执行路径。</p>\n<p>我们再运行脚手架，此时在后面加上一个参数：</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-text line-numbers\"><code class=\"language-text\">imooc-test-jun init</code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span></span></pre></div>\n<p>看看打印结果：</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-text line-numbers\"><code class=\"language-text\">[ &#39;C:\\\\Program Files\\\\nodejs\\\\node.exe&#39;,\n  &#39;C:\\\\Users\\\\jun\\\\AppData\\\\Roaming\\\\npm\\\\node_modules\\\\imooc-test-jun\\\\bin\\\\index.js&#39;,\n  &#39;init&#39; ]</code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span></span></pre></div>\n<p>我们发现，此时返回的数组的第三个元素就是我们输入的init。</p>\n<h2 id=\"下面的实例解析init-和init所传入的参数、--v和-v命令\" style=\"position:relative;\"><a href=\"#%E4%B8%8B%E9%9D%A2%E7%9A%84%E5%AE%9E%E4%BE%8B%E8%A7%A3%E6%9E%90init-%E5%92%8Cinit%E6%89%80%E4%BC%A0%E5%85%A5%E7%9A%84%E5%8F%82%E6%95%B0%E3%80%81--v%E5%92%8C-v%E5%91%BD%E4%BB%A4\" aria-label=\"下面的实例解析init 和init所传入的参数、  v和 v命令 permalink\" class=\"auto-anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>下面的实例解析init 和init所传入的参数、--v和-V命令</h2>\n<ul>\n<li>我们在脚手架依赖的一个包写一个init函数</li>\n</ul>\n<blockquote>\n<p>imooc-test-jun-lib --> index.js</p>\n</blockquote>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-text line-numbers\"><code class=\"language-text\">module.exports = {\n    init({option, param}) {\n        console.log(&#39;init1&#39;, option, param)\n    }\n}</code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span><span></span><span></span></span></pre></div>\n<ul>\n<li>\n<p>在脚手架核心文件imooc-test-jun引入依赖库imooc-test-jun-lib，编写参数解析的功能</p>\n<blockquote>\n<p>imooc-test-jun --> index.js</p>\n</blockquote>\n</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-text line-numbers\"><code class=\"language-text\">#!/usr/bin/env node\nconst lib = require(&#39;imooc-test-jun-lib&#39;) // 引入依赖库\nlet argv = require(&#39;process&#39;).argv // 引入node的process模块并且取argv的值\nconsole.log(argv)\nconst command = argv[2]\nlet options = argv.slice(3)\nlet [option, param] = options\nif (command) {\n    if(command.startsWith(&#39;--&#39;)||command.startsWith(&#39;-&#39;)) { // 看作全局option\n        const globalOption = command.replace(/--|-/g, &#39;&#39;)\n        console.log(globalOption)\n        if(globalOption === &#39;version&#39;||globalOption === &#39;V&#39;) {\n            console.log(&#39;1.0.0&#39;)\n        }\n    } else {\n        if (lib[command]) {\n            lib[command]({option, param})\n        } else {\n            console.log(&#39;无效的命令&#39;)\n        }\n    }\n\n} else {\n    console.log(&#39;请输入命令&#39;)\n}</code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre></div>\n<p>这是一个很简单的实例，复杂的参数解析可能需要依赖第三方库进行解析，但是基本原理确就是如此。</p>","excerpt":"动手实操node的process模块 index.js 我们先运行脚手架 ： 看看打印结果： 打印出来是一个数组，数组第一个元素是node本身的执行路径，第二个数组是我们的脚手架执行路径。 我们再运行脚手架，此时在后面加上一个参数： 看看打印结果： 我们发现，此时返回的数组的第三个元素就是我们输入的init。 下面的实例解析init 和init所传入的参数、--v和-V…","tableOfContents":"<ul>\n<li><a href=\"/2021/06/06/%E8%84%9A%E6%89%8B%E6%9E%B6%E5%BC%80%E5%8F%91%EF%BC%9A%E5%91%BD%E4%BB%A4%E6%B3%A8%E5%86%8C%E5%92%8C%E5%8F%82%E6%95%B0%E8%A7%A3%E6%9E%90/#%E5%8A%A8%E6%89%8B%E5%AE%9E%E6%93%8Dnode%E7%9A%84process%E6%A8%A1%E5%9D%97\">动手实操node的process模块</a></li>\n<li><a href=\"/2021/06/06/%E8%84%9A%E6%89%8B%E6%9E%B6%E5%BC%80%E5%8F%91%EF%BC%9A%E5%91%BD%E4%BB%A4%E6%B3%A8%E5%86%8C%E5%92%8C%E5%8F%82%E6%95%B0%E8%A7%A3%E6%9E%90/#%E4%B8%8B%E9%9D%A2%E7%9A%84%E5%AE%9E%E4%BE%8B%E8%A7%A3%E6%9E%90init-%E5%92%8Cinit%E6%89%80%E4%BC%A0%E5%85%A5%E7%9A%84%E5%8F%82%E6%95%B0%E3%80%81--v%E5%92%8C-v%E5%91%BD%E4%BB%A4\">下面的实例解析init 和init所传入的参数、--v和-V命令</a></li>\n</ul>","fields":{"slug":"/2021/06/06/脚手架开发：命令注册和参数解析/"},"frontmatter":{"date":"June 06, 2021","title":"脚手架开发：命令注册和参数解析","description":"本篇会动手写很简单的命令注册和参数解析的实例。","quote":{"content":"In spite of you and me and the whole silly world going to pieces around us, I love you.","author":"Gone with the Wind","source":""},"tags":["脚手架开发","脚手架命令注册","脚手架参数解析"]}}},"pageContext":{"id":"1375905c-e812-5b04-9810-0b8e90a3c8ab","prev":{"title":"脚手架开发：脚手架开发的流程以及本地调试、分包调试","path":"/2021/05/29/脚手架开发：脚手架开发的流程以及本地调试、分包调试/"},"next":{"title":"脚手架开发：Lerna简介","path":"/2021/07/08/脚手架开发：lerna简介/"}}}}