《Node.js》

2021-02-03  本文已影响0人  孔朝阳

一、资料

1、官网资料

Node.js官网
npm官网
npm中文网

2、参考资料

npm发布全局包

二、简介

1、Node.js 是一个开源与跨平台的 JavaScript 运行时环境。
2、Node.js 在浏览器外运行 V8 JavaScript 引擎(Google Chrome 的内核)。
3、Node.js 中使用require(),而在浏览器中则使用 import

三、使用

1、基本操作

// 安装Node.js
brew install node
// node版本
node -v
// 运行
node [name].js
// 命令行退出
Ctrl+C 

2、process模块

Node.js 的 process 核心模块提供了 env 属性,该属性承载了在启动进程时设置的所有环境变量。process 不需要 require,它是自动可用的

// 使用 Node.js 中内置的 process 对象获取参数,第一个参数是 node 命令的完整路径,第二个参数是正被执行的文件的完整路径。
node [name].js joe
node [name].js name=joe
// 循环迭代所有的参数
process.argv.forEach((val, index) => {
  console.log(`${index}: ${val}`)
})
// 创建一个排除了前两个参数的新数组来仅获取其他的参数
const args = process.argv.slice(2)
// 编程退出
process.exit()
// 环境变量
process.env.NODE_ENV // "development"

3、console模块

该模块提供了大量非常有用的与命令行交互的方法

// 输出
console.log()
// e.g.
const x = 'x'
const y = 'y'
console.log(x, y)
// 格式化输出
// %s 会格式化变量为字符串
// %d 会格式化变量为数字
// %i 会格式化变量为其整数部分
// %o 会格式化变量为对象
// e.g.
console.log('%o', Number)
console.log('我的%s已经%d岁', '猫', 2)
// 清空控制台
console.clear()
// count 方法会对打印的字符串的次数进行计数,并在其旁边打印计数
console.count()
// 打印堆栈踪迹
console.trace() 
// e.g.
const function2 = () => console.trace()
const function1 = () => function2()
function1()
// 计算耗时
time() 
timeEnd()

4、readline模块

Node.js 提供了 readline模块来执行以下操作:每次一行地从可读流获取输入

const readline = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
})

readline.question(`你叫什么名字?`, name => {
  console.log(`你好 ${name}!`)
  readline.close()
})

四、模块

Node.js 模块是一种可以发布到 npm 的包。

1、package.json

文件格式:

package.json
|- name // 必填;全部小写;没有空格;可用-或者_;
|- version // 必填;格式x.x.x
|- description // 如果为空,使用README文件第一行代替;有助于找到package
|- main // 入口文件字段,默认值 index.js
|- scripts 
|- author 
|- license 
|- dependencies // 生产依赖
|- devDependencies // 开发依赖

For example:
{
  "name": "my-awesome-package",
  "version": "1.0.0"
}

2、创建模块

// npm初始化,创建package.json
// 进入命令行参数输入
npm init
// 创建默认版本
npm init -y
npm init --yes

3、exports

1、Node.js 具有内置的模块系统,Node.js 文件可以导入其他 Node.js 文件公开的功能。
2、默认情况下,文件中定义的任何其他对象或变量都是私有的,不会公开给外界。在文件中,必须先公开功能,然后其他文件才能将其导入。
3、当将对象或函数赋值为新的 exports 属性时,这就是要被公开的内容,因此,可以将其导入应用程序的其他部分或其他应用程序中。
4、第一种方式是将对象赋值给 module.exports(这是模块系统提供的对象),这会使文件只导出该对象。第二种方式是将要导出的对象添加为 exports 的属性。这种方式可以导出多个对象、函数或数据。

// 导入存在于当前文件夹中的 library.js 文件中公开的功能
const library = require('./library')

//  将对象赋值给 module.exports
const car = {
  brand: 'Ford',
  model: 'Fiesta'
}
module.exports = car
//在另一个文件中
const car = require('./car')

// 将要导出的对象添加为 exports 的属性
exports.car = {
  brand: 'Ford',
  model: 'Fiesta'
}
//在另一个文件中
const car = require('./items').car

五、npm

1、npm 是 Node.js 标准的软件包管理器,可以管理项目依赖的下载。
2、Yarn 是 npm 的一个替代选择。
3、本地和全局的软件包之间的主要区别是:本地的软件包安装在运行 npm install <package-name> 的目录中,并且放置在此目录下的 node_modules 文件夹中。全局的软件包 放在系统中的单独位置(确切的位置取决于设置),无论在何处运行 npm install -g <package-name>

// npm版本
npm -v
// 安装npm最新版本
npm install npm@latest -g.
// 全局安装的位置
npm root -g
-------------------------------------------------------------------
// npm源
// 输出npm源
npm config get registry
// 改变npm源
npm config set registry [URL]
npm config set registry https://registry.npmjs.org/
npm config set registry http://registry.npm.taobao.org
-------------------------------------------------------------------
// npm安装
// 安装所有依赖。如果项目具有 package.json 文件,则会在 package.json 文件中查找所约定的语义化版本规则,然后安装符合此规则的最新版本,通过运行,会在 node_modules 文件夹(如果尚不存在则会创建)中安装项目所需的所有依赖
npm install
// 本地安装,命令执行之后将会在当前的目录下创建 node_modules 目录(如果不存在的话),然后将下载的包保存到这个目录下
npm install <package>
// --save 安装并添加条目到 package.json 文件的 dependencies
// --save-dev 安装并添加条目到 package.json 文件的 devDependencies
// devDependencies 通常是开发的工具(例如测试的库),而 dependencies 则是与生产环境中的应用程序相关
npm install <package> [--save/--save-dev]
// 全局安装
npm install <package> -g
-------------------------------------------------------------------
// npm更新
// 列出待更新包 [全局]
npm outdated [-g]
// 更新所有软件包 [全局]
npm update [-g]
// 更新单个软件包 [全局]
npm update <package> [-g]
-------------------------------------------------------------------
// npm卸载
//  删除包并从 package.json 文件中删除依赖
// 从项目的根文件夹(包含 node_modules 文件夹的文件夹)中运行
npm uninstall <package> [--save/--save-dev]
// 删除 node_modules 目录下面的包 [全局]
npm uninstall <package> [-g]
-------------------------------------------------------------------
// 查看所有已安装的 npm 软件包(包括它们的依赖包)的最新版本 [全局]
npm list [-g]
// 查看所有已安装的 npm 软件包,仅获取顶层 [全局]
npm list --depth=0 [-g]
// 通过指定名称来获取特定软件包的版本
npm list <package>
-------------------------------------------------------------------
// 查看软件包在 npm 仓库上最新的可用版本
npm view <package> version
// 列出软件包所有的以前的版本
npm view <package> versions
// 使用 @ 语法来安装 npm 软件包的旧版本 [全局]
npm install <package>@<version> [-g]
-------------------------------------------------------------------
// 运行任务
npm run <task>
-------------------------------------------------------------------
// npm发布
// 登录之后才可以进行发布。
// npm账户
npm adduser
npm login
npm whoami
// npm预发布,可以执行命令行
npm link
// npm解除预发布,可以执行命令行
npm unlink
// npm发布,注意切换npm源,taobao源无发布权限,https://npmjs.com/package
npm publish
// 解除发布
npm unpublish <package> --force

六、全局安装包

1、nrm

npm install nrm -g
// 列出所有源和指令
nrm ls
// 切换地址
nrm use [registry_name]
// 测试速度
nrm test [registry_name]

七、库

resolver 是一个库(library),用于帮助找到模块的绝对路径。

1、lodash

// 把软件包安装到本地的 node_modules 文件夹中
npm install lodash
// 要在代码中使用,只需使用 require 将其导入到程序中
const _ = require('lodash')

2、minimist

处理参数

node app.js --name=joe
const args = require('minimist')(process.argv.slice(2))
args['name'] //joe

3、chalk

// 安装
npm install  --save chalk
// 使用
const chalk = require('chalk')
console.log(chalk.yellow('Hello'))

4、progress

// 安装
npm install --save progress
// 使用
const ProgressBar = require('progress')
const bar = new ProgressBar(':bar', { total: 10 })
const timer = setInterval(() => {
  bar.tick()
  if (bar.complete) {
    clearInterval(timer)
  }
}, 100)

5、inquirer

// 安装
npm install --save inquirer
// 使用
const inquirer = require('inquirer')
var questions = [
  {
    type: 'input',
    name: 'name',
    message: "你叫什么名字?"
  }
]
inquirer.prompt(questions).then(answers => {
  console.log(`你好 ${answers['name']}!`)
})

6、Commander

Commander GitHub
Commander基本使用

7、child_process

https://www.cnblogs.com/justyouadmin/p/11395839.html
https://blog.csdn.net/bjzhaoxiao/article/details/80896611?utm_medium=distribute.pc_relevant_download.none-task-blog-baidujs-2.nonecase&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-baidujs-2.nonecase

八、创建npm包

1、创建目录,npm初始化,生成默认的package.json文件

mkdir jdpay
cd jdpay
npm init -y

2、添加index.js入口文件

// index.js
console.log("Hello, JDPay");

// 执行index.js,本地测试
node index.js

3、添加jdpay.js,在index.js导入

// jdpay.js
module.exports = {
    pay: function () {
        console.log("JDPay");
    }     
 }; 

// index.js
let jdpay = require('./bin/jdpay.js');
jdpay.pay();

4、修改index.js,预发布

npm root -g
npm link

5、创建工程,安装测试

npm link <package>

6、发布

npm publish

九、创建CLI

1、创建目录,npm初始化

mkdir jdpay-cli
cd jdpay-cli
npm init -y

2、添加bin文件夹和jdpay.js文件

mkdir bin
cd bin
cat > jdpay.js
console.log("JDPay");
^C

3、在package.json里配置 bin

// package.json
"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
"bin": {
    "pay": "./bin/jdpay.js"
 },

4、导入commander

// 安装
npm install commander --save

// jdpay.js
#!/usr/bin/env node
const program = require('commander');
program
    .version(require('../package').version) // 设置版本
    .option('-p, --port [port]', 'Input port !') // 自定义形参[port]
    .parse(process.argv); // 参数数组
console.log(program.port); // 使用自定义的port参数

// node jdpay.js -p test
test

5、预发布、命令测试

npm link

// jdpay-cli
jdpay -p test
test

6、npm发布

npm publish
上一篇下一篇

猜你喜欢

热点阅读