《Node.js》
一、资料
1、官网资料
2、参考资料
二、简介
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