你应该掌握的命令

  • 什么是命令行
  • 命令行的优势
  • 命令行如何工作
  • NodeJS下的命令行程序
  • 撰写NodeJS的命令行程序
  • 发布NodeJS包

什么是命令行

1:人脑 > 消息器官>交互接口>操作系统>计算机> 操作系统> 交互接口> 感官 > 人脑
2:一种基于文本流的用户交互接口和交互方式

命令行的优势
1: 单一目标、协同工作、通用接口 简洁、高效、操作易保存和传播

#!/bin/sh
cat data.txt | sort | uniq -c | sort -n -r | head 108 > top_data.txt

命令行如何工作
1: shebang
2:命令解释程序
3: $PATH搜索

NodeJS下的命令行程序

多版本切换 n/nvm

sudo n latest
n

	n	nvm
npm安装	Y	N
脚本安装	Y	Y
修改PATH	N	Y
替换系统路径	Y	N
切换效率	稍低	高
windows方案	wsl/cgwin	wsl/cgwin/nvm-win

开发脚手架 vue-cli/create-react-app/ng-cli

1:通过简单、标准化的命令,快速搭建一个符合预设的项目骨架
2: 在符合预设的基础上,通过npm scripts透明化开发、构建、部署、测试等任务

	                   v	c	n
官方背景	               Y	Y	Y
接管流程	        开发/构建/部署/测试	开发/构建/部署/测试	开发/构建/部署/测试/文档
定制化途径	问答、定制preset	npm安装	问答、ng子命令
生成代码语言	Javascript	Javascript	Typescript
可配置性	               中	强	弱
配置易用性	         强	中	中强

预编译与打包 babel/webpack
在这里插入图片描述

babel.config.js与.babelrc

  • 目的都是配置presets和plugins
  • babel.config.js在根目录,.babelrc在各级目录都可以有
  • 只要有了babel.config.json, 下面各级的.babelrc都失效
  • .babelrc:最近的配置覆盖原则
  • babel.config.js的意义:给配置一个编程生成的机会

plugins/presets

  1. 先运行plugin,后运行preset
  2. plugin按配置顺序运行
  3. preset按配置反序运行
  4. 先小后大,小正大反
{
  "plugins": ["transform-decorators-legacy", "transform-class-properties"],
  "presets": ["es2015", "react", "stage-2"]
}

loader和plugin的区别

webpack-dev-server

  • 支持命令行和webpack配置两种方式
  • 底层采用express建立web server
  • 可以指定port/hosts
  • 模块热替换 HotModuleReplacement

常见优化手段

  • 全局化第三方库:externals
  • 分层级划分项目公用库:ProvidePlugin/CommonsChunkPlugin
  • 按需加载:require.ensure

执行辅助 nodemon/npx

  • Nodemon运行,修改代码无需重启
  • 除了监控NodeJS,还可监控其他语言程序
npx http-server

npm scripts

  • 内置钩子
  • 自定义脚本

SemVer
x.y.z
x:主版本号:不向下兼容的新功能
y:次版本号:向下兼容的新功能
z:修订号:向下兼容的修正

=~^>
1.0.0-alpha

1.0.0-alpha.1

1.0.0-alpha.beta

1.0.0-beta

1.0.0-beta.2

1.0.0-beta.11

1.0.0-rc.1

1.0.0

SemVer

  • 用连接号连接修订号和标识号
  • 不许空格,不许加前导零
  • 用“.”分割各段
  • 只有数字比数值,否则比ascii码
  • 最后看谁点多

撰写NodeJS的命令行程序

  • 命令参数读取 commander
  • 进度条 progress
  • 交互着色 chalk
  • 交互式问答 inquirer
  • loading中的小图标ora
  • 命令行玩浏览器 puppeteer
  • ThinkJS VS CMD
    命令参数读取 commander
var program = require('commander');
program
  .version('0.1.0')
  .option('-p, --peppers', 'Add peppers')
  .option('-P, --pineapple', 'Add pineapple')
  .option('-b, --bbq-sauce', 'Add bbq sauce')
  .option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble')
  .parse(process.argv);
console.log('you ordered a pizza with:');
if (program.peppers) console.log('  - peppers');
if (program.pineapple) console.log('  - pineapple');
if (program.bbqSauce) console.log('  - bbq');
console.log('  - %s cheese', program.cheese);

命令参数读取 commander

用户的每一个输入,都会放置在program对应option长名的字段的驼峰形式上,如果没有提供长名,则放在短名字段上

命令参数读取 commander

var program = require('commander');
program
  .version('0.1.0')
  .command('install [name]', 'install one or more packages')
  .command('search [query]', 'search with optional query')
  .command('list', 'list packages installed', {isDefault: true})
  .parse(process.argv);

进度条 progress

   const ProgressBar = require("progress")
   
   ...
   
   const bar = new ProgressBar(
     '下载中: ├:bar┤ 完成:percent 预估完成时间:eta秒 用时:elapseds', 
     {
        total: 100,
        complete: "█",
        incomplete: "─",
        width: 60
    })
    
    ...
    
   let progressFix = ((state.percent) * 100).toFixed(2)
   delta = progressFix - percent
   bar.tick(delta)

交互着色 chalk

交互式问答 inquirer.js

loading中的小图标ora
命令行玩浏览器 puppeteer

寻找你的包

npmjs.org 搜索
https://github.com/sindresorhus/awesome-nodejs

发布NodeJS包

1: mkdir jjsnc-test
2: cd jjsnc-test
3: npm init (选择MIT 格式)
4:: npm adduser 输入npm 账号密码
5: npm publish

发布带有命名空间的包
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值