node相关

2018-06-17  本文已影响15人  love_program

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

buffer

上一篇 下一篇

猜你喜欢

热点阅读