美文网首页
node相关

node相关

作者: love_program | 来源:发表于2018-06-17 00:46 被阅读15次

node是什么

  • node 是基于chrome v8引擎的javascript运行时环境。 node使用了事件驱动和非阻塞I/O模型,使其轻量高效。node的包管理器是npm
  • 查看更多node相关

node的安装(mac)

//1. 安装nvm
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
//2. 安装node指定版本
nvm install 8.11.3
//3. 使用指定版本
nvm use 8.11.3
//4. 查看node版本
node -v
//5. 用cnpm替换npm提高下载模块速度
npm i cnpm -g

相关概念

  1. node的主线程是单线程的
  2. web异步方式有:setTimeout, callback, onClick, ajax
  3. 同步/阻塞,异步/非阻塞;同步是针对应用程序执行流程来说的,阻塞是针对内核输入输出来说的;异步和非阻塞也是同样的道理
    4.i/o操作, 就是读写操作,能用异步就不要用同步
  4. 区分环境变量,代码里通过process.env.NODE_ENV;
export NODE_NEV=XXX;//linux
set NODE_ENV=XXX;//window
  1. process.nextTick(function(){})//异步的,当前队列的底步,同步之后的执行
    setImmediate(function(){})//放入到第二个队列中
    setTimeout(function(){})//也是放在第二个队列,如果不加参数是跟setImmediate一样,哪个先执行,不一定;如果需要设置时间需要用setTimeout

7.剩余运算符(...如果放在形参里面就是剩余运算符)(es6语法)

通过...剩余运算符,将所有的参数放到args数组里面
setTimeout((...args) => {
    
    console.log(args.length)
},100, '吃饭’)
  1. 展开运算符(...如果放在实参里面就是展开运算符)(es6语法)
function add($1,$2) {
    console.log($1,$2)
}

add(...[1,3]);
  1. 合并对象(用...扩展运算符,es7语法,需要node版本8.5以上)
let obj1 = {name:'miaozhirui'};
let obj2 = {age:18}

let obj3 = {...obj1, ...obj2};
console.log(obj3)
  1. node 里面的js文件有个全局变量arguments,该参数表示的是外层的闭包的形参,值有以下几个,这几个参数可以在文件中直接使用
exports requre module __filename __dirname
  1. 模块化的作用: 低耦合,高内聚,把实现相同功能的代码放在一个文件(高内聚),把实现不同功能的代码分开成不同的文件(低耦合);方便维护;防止代码冲突(命名冲突)
  2. 实现模块化的方式有哪些:闭包和单例;单例最终被淘汰,在js里面单例就是定义了字面量对象,一个人用obj对象,另一个人也用了obj对象,并不能保证唯一冲突, 还是会导致冲突,所以最终被淘汰了,
  3. 浏览器端通过闭包实现的模块化主要有两种规范,一个是CMD, 一个是AMD(浏览器端的模块规范,seajs是CMD的代表作(就近依赖),requirejs是AMD的代表作(依赖前置))
  4. nodejs实现模块化的规范是基于commonjs,规范定义了以下规则
1. 定义如何创建一个模块:一个js文件就是一个模块
2. 定义如何使用一个模块: 使用一个文件只需要require一个文件
3. 定义如何导出一个模块: exports/module.exports
  1. nodejs里面如果一个函数是异步函数的话,一般都有回调函数
  2. exports和module.exports的区别: exports和module.exports都指向了同一个对象,但是模块最终导出的是module.exports, 也就是说如果导出的时候是exports=demo,这句话其实是不生效的,这句话只是给exports重新复制了,但是module.exports指向的对象并没有变化
  3. utils.isArray 和utils.isFunction, utils.inherits(继承共有方法)
  4. util.promisify把普通的带有回调函数的方法转成promise
  //要想一个函数执行完之后具有then方法,只需要执行完成之后,返回promise即可
  read().then(function(data){},function(error){})
  //所以read方法可以像下面这样写
  function read(){
    //resolve和reject都是函数,当调用resolve会调用then的第一个方法;当调用reject会调用then的第二个参数
    return new Promise((resolve, reject) => {

    })
}
############## 以上的方法太麻烦了 ################
let util = require('util');
let fs = require('fs');
let readFile = util.promisify(fs.readFile);//将函数promisify化

readFile('2.js', 'utf8').then(function (data) {
  console.log(data)
}, function (error) {
  console.log(error)
})

模块的安装

  • 全局安装

    1. npm i xxx -g (只能在命令行中使用)
    2. npm root -g 可以查看全局安装的包安装到哪里了
    3. nvm是切换node的版本的,用来管理的node的版本,可以安装在全局
    4. nrm是切换npm的源,具体使用如下
    //安装
    cnpm i nrm -g
    nrm ls
    nrm use taobao //切换仓库源
    
    1. http-server模块的使用,用来启动一个server,如果想以哪个目录作为根目录建server,就进入到哪个目录,执行http-server集合
    npm http-server -g
    cd /demo
    http-server;
    
    1. 可以基于node第三方模块idoc模块新建一个博客模板
  • 本地安装

    1. 本地安装没有-g参数,安装之前需要在目录里面初始化,用来记录安装的依赖
    2. npm init -y 会在当前目前新增加一个package.json文件
    3. 当在某个目录下安装第三方模块的时候,会先在当前目录找package.json文件; 如果找不到,会到父及目录找,找不到才会在当前目录下安装
    4. package.json中的scripts可以配置快捷命令脚本npm run dev
    5. 本地的依赖分为开发依赖和项目依赖;项目依赖是开发时需要,上线也需要;开发依赖是开发时需要,上线时不需要;
      //安装项目依赖
      npm install jquery --save 
      //删除项目依赖
      npm uninstall jquery --save
      // 安装开发依赖
      npm install less -D || npm i less --save-dev 
      //删除开发依赖
     npm uninstall less --save-dev
      //安装全部依赖
     npm install //会把package.json文件里面记录的依赖全部安装上
      //安装指定版本
      npm install jquery@xxx
    
    

发布包

  1. 先回到国外nrm use npm
  2. 包名不能和已有的包名相同
  3. 需要一个入口文件来做整合
  4. npm whoami//查看当前用户是谁
  5. 注册账号npm addUser
  6. 如果有账号的话npm login输入账号即可
  7. 发包 npm publish [floder]//不带floader表示发布当前目录

buffer

  • 概念

    1. 概念: buffer是缓冲区,就是暂时用来存放输入输出数据的一段内存
    2. 引入原因: js语言没有二进制数据类型,而在处理TCP流和文件流的时候,必须要处理二进制数据
    3. Nodejs提供了一个Buffer对象来提供对二进制数据的操作
    4. buffer对象是一个表示固定内存分配的全局对象,也就是说要放到缓存区中的字节数需要提前确定
    5. buffer好比由多位自己元素组成的数组,可以有效的在javascript中表示二进制数据
    6. buffer里面存放的是16进制
  • 字节

    1. 计算机最小存储计量单位是:BIT(位) 二进制数据
    2. 计算机最基本存储计量单位是:Bytes(字节)
    1024bytes = 1k
    8bit(8个二进制) = 1bytes
    1个汉字(3个bytes)
    1个字节转成十进制最大是255
    1个字节最大转换成16进制是ff
    
  • 定义buffer的三种方式

    1. 通过长度定义buffer(最常用)
    let buffer = Buffer.alloc('6');
    let buffer = Buffer.allocUnsafe(6);
    
    1. 通过数组定义buffer
    let buffer = Buffer.from([1,2,3,4])
    
    1. 字符串创建buffer(把字符串转成buffer)
    let buffer = Buffer.from('珠峰培训')
    
  • buffer转成字符串

    buffer.toString()
    

相关文章

  • node相关

    node是什么 node 是基于chrome v8引擎的javascript运行时环境。 node使用了事件驱动和...

  • node相关

    模板引擎 // npm install consolidate // var consolidate = requ...

  • node相关

    1. 查看版本号 2. 清除node.js的cache 3. 安装 n 工具,这个工具是专门用来管理node.js...

  • node 相关

    1、更换 node 镜像库为 淘宝镜像。 npm install -g cnpm --registry=https...

  • Node相关

    forever 插件使程序后台运行

  • Node相关

    1、module.exports和exports使用方法一致 exports是module.exports的别名,...

  • 20141225学习记录

    一、node相关## 1.node版本管理### 利用n和nvm管理Node的版本标签: n nvm node版本...

  • Node爬虫相关

    网络爬虫开发 第1章 课程介绍 什么是爬虫 爬虫的意义 课程内容 前置知识 什么是爬虫 可以把互联网比做成一张“大...

  • Erlang node相关

  • Node相关知识

    使用commonjs规范:直接使用module.exports导出模块,require导入global下常用属性有...

网友评论

      本文标题:node相关

      本文链接:https://www.haomeiwen.com/subject/yteieftx.html