zhuhuiwen Front-end Dev Engineer

nodejs-day01

2017-01-11

nodejs安装/node命令/module/exports/require/node核心/3m

site

  1. site
    1. github
    2. stackoverflow
      1. 辅助面试
    3. cnodejs

初始node.js

node.js的官方定义

  1. 代码状态
    1. 写的时候是编写状态
    2. 变成计算机可以读的,编译状态
    3. 代码运行的时候,就是运行平台
  2. 概念
    1. nodejs是js运行的一个环境,基于chrome浏览器的v8引擎
    2. node.js的特点 事件驱动 无阻塞的io模型(异步) 使node轻量高效
    3. 包生态系统 —> npm[node package manager]是一个客户端工具 世界上最大的包管理系统
  3. 命令
    1. shift+右键
      1. 打开cmd终端
      2. node js文件.js
      3. 就是让nodejs去执行一个指定的js文件
  4. 命令解释
    1. node+文件路径
      1. node是调用已经安装的node应用程序
      2. 文件路径 是给node传的一个参数
        1. 注意点
          1. 不可以跨盘符调用js文件
    2. 和浏览器没有关系了,alert是基于浏览器的

js的引擎

  1. 特点
    1. 转化
      1. 汽车引擎 汽油 —-> 能量
      2. 模板引擎 模板+数据 —-> 页面
      3. js引擎 js代码 —->01010101 字节码、机器码
        1. 浏览器的引擎,就是执行js的
    2. 可移植性
      1. 引擎可以替换
        1. 比如360使用的ie或是chrom的内核…
        2. 汽车的引擎可以用别的车的引擎来换
      2. 为什么不使用其他引擎
        1. v8的引擎稳定性比较高
    3. 注意点
      1. node没有兼容性的问题了,node不是浏览器,给内核套了一个盒子,但不是浏览器

总结

  1. 注意点
    1. node是后台的技术,是门技术不是语言
    2. 网站的执行过程 www.taobao.com 服务器 [页面、图片、js文件、css文件、静态的文件资源] [后台的技术 读写文件 发送网络请求 接收网络请求 java php .net node.js]

    3. 使用node网站
      1. 创业 开发成本低 开发效率高
      2. 互联网 ali (天猫所有的页面) bat
      3. 游戏公司 b站

node.js

  1. Ryan Dahl
    1. 2011年7年,node.js在微软的支持下发布wndow版本

      node.js的版本进化

  2. LTS long time support 长期支持 稳定版—下载的时候下载这个
  3. 版本后缀
    1. .msi window安装包
    2. .exe window是二进制版
    3. ….
    4. 说明
      1. 是一个跨平台的技术
  4. 历史版本
    1. 09出现node.js
    2. 11年出现的这个网站
    3. 用版本的时候用偶数版,稳定

小例子

  1. 定义

    02.module.js var a = 123; //打开一个通道被别人调用 module.exports = a;

  2. 加载

    03.require.js var data = require(‘./02.module.js’); //通过接口得到module.exports的值 console.log(data);

node.js的模块化

global

  1. 是node下的全局
  2. 代码

     a = 123;
     //global是全局的
     console.log(global.a);
    

console.assert断言和console.time()和console.timeEnd()

  1. 断言
    1. 对一个表达式结果进行评估,
    2. 如果表达式为false则输出消息字符串并抛出AssertionError异常:
    3. 用于定位错误的
    4. 代码

       var a = 3;
       console.assert(a == 1, 'assert');
      
  2. 返回开始与结束之间的毫秒数:
    1. console.time()标记开始时间
    2. console.timeEnd()标记结束时间
    3. 方法可以传入任何参数,但开始时间与结束时间参数必须一致
    4. 代码

       console.time('test');
       for(var i=0;i<10000;i++){console.log();}
       console.timeEnd('test');
      

node.js的模块化

  1. 一个js文件就是一个模块,模块里面的代码的作用域就在这个文件中
    1. 优点: 一次编写多次使用、便于维护
  2. node的模块化符合commonjs规范
  3. 环境
    1. window下的全局环境 加载js 是顺序加载
    2. node全局环境 是一个一个的加的 ** 之间的打通 module.exports 和 require **
  4. 代码node核心
    1. 在01cla中
      1. require得到的永远是module.exports
    2. 在02add.js
      1. 在给module.exports赋值之前,它是一个空对象
      2. 正确的用法
        1. modul.exports.addFn = add;
        2. 可以链式操作
      3. 错误的用法
        1. module.exports直接赋值只能被使用一次
    3. 代码
      1. 01.cal.js

         /*var  add = require('./add.js');
         console.log(add(1,2));*/
        			
         //得到的是obj
         /*console.log(typeof require('./add.js'));//object
         var  obj = require('./add.js');
         console.log(obj.addFn(1,2));//3
         console.log(obj.test);//123*/
        			
         console.log(require('./add.js'));//567
        
        	
         add.js
         var add = function(v1,v2){
         return v1+v2;
         }
         // module.exports = add;
         // console.log(module)
        			
         /*
        			
         在给module.exports赋值之前,它是一个空对象
         正确的赋值方式
         给对象赋值
         */
         /*module.exports.addFn = add;
         module.exports.test = 123;*/
        			
         //module.exports直接赋值只能被使用一次
         module.exports = 123;
         module.exports = 567;
        

module

  1. 模块对象,当运行js的时候,有一个js,node就会为其创建一个module去存储这个js的相关信息
  2. 03-sub.js
    1. 所有被引用的代码,编写目的是为了暴露module.exports
    2. 第一次已经加载完了,放到全局对象中内存中;第二次进行加载的,直接去内存中拿去了

module.exports

require

  1. 第一次加载js(module)的时候,会执行一遍js里面的代码
  2. 第二次加载js的时候,不执行js代码了,直接去内存中找第一次加载js对应的module对象,从中找到module.exports
  3. 代码

         01.js
         /*只会打印一次123
         1. 第一次加载js(module)的时候,会执行一遍js里面的代码
         2. 第二次加载js的时候,不执行js代码了,直接去内存中找第一次加载js对应的module对象,从中找到module.exports
         */
         var sub = require('./sub.js');
         var sub2 = require('./sub.js');
    
         sub.js
         console.log(123);
         var sub = function(v1,v2){
             return v1-v2;
         }
         module.exports = sub;
    

vscode教程

  1. http://i5ting.github.io/vsc/

exports

  1. exports 是module.exports的别名
  • require module exports

模块化总结

  1. 模块化的代码具有封装性

    ,对代码进行包装,我想让你用什么接口,使用什么

  2. 有封装就有打破封装,需要给别人开接口,module.exports exports
  3. module.exports直接赋值
  4. exports 当一个js中有很多的属性和方法的时候,就使用exports向外暴露
  5. 一个js文件就是一个模块
  6. 一个模块的信息被保留在module对象里面,每一个模块都有一个module与之对应
    1. module对象产生了以后,第二次加载就不会再去执行,而是去内存中module对象中找module.exports

3m安装法

  1. npm
    1. 可以进行下载包,类似jq代码
      1. npm install jquery
    2. ** 下载工具 **
      1. npm install -g nrm
        1. 加上-g是全局安装
        2. 不加-g是下载到当前目录下
  2. nrm
    1. nrm的下载是在国外的

      1. 解决办法 1. c/user/自己的用户/.npmrc 1. 去创建一个.npmrc 2. 用vscode打开 1. 将淘宝的数据源改下registry = ….就是手动去处理一下 2. 这个方法么生效

    2. npm 数据源管理工具
    3. 执行的命令
      1. nrm -h 查看帮助文档
      2. nrm ls 查看npm的数据源有哪些,标星号的表示正在使用的
      3. nrm use 数据源的名字 例如nrm use taobao
        1. 数据源已经被切换成淘宝的了
  3. nvm —–没操作
    1. node version manager
    2. nvm -h
    3. nvm list
    4. nvm install 版本号 下载
    5. nvm use 版本号 使用
    6. 解压dev
      1. nvm
      2. nodejs
      3. 配置环境变量(用户变量)
        1. NVM_HOME
          1. 将把nvm目录粘贴
        2. NVM_SYMLINK
          1. 把node目录粘贴
        3. 用户变量
          1. PATH
            1. 加上;%NVM_HOME%;%NVM_SYMLINK%
            2. 就是在任意盘可以找到nvm
  4. 环境变量的原理
    1. 先去目前在的文件下找,如果没有去找全局的可执行文件的文件名

查看api

  1. LTS版本的6.9.4

1/11/2017 5:04:20 PM


Similar Posts

下一篇 nodejs-day02

Comments