美文网首页程序员
初学NODE 学习笔记

初学NODE 学习笔记

作者: 史密斯_Du | 来源:发表于2017-02-23 00:16 被阅读0次

    NODE 学习笔记(一)

    NODE是什么

    • NODE不是后台开发语言,我们了解的JAVA、PHP、C#、.NET(dot net)...才是后台开发语言,NODE仅仅是一个工具,一个基于V8引擎来渲染和解析JS的平台和工具(有点类似浏览器)

    在真实的开发中,我们一般都把NODE安装在服务器端,这样我们就可以在服务器端编写一些JS代码来处理服务器端的业务逻辑了,
    =>JS不仅仅可以在客户端浏览器中运行处理客户端业务逻辑(前端开发语言),也可以在服务器端的NODE环境下运行处理服务器端业务逻辑(后台开发语言),所以可以变相的说JS是全栈开发语言

    NODE如何去执行JS代码

    • WebStorm:在JS文件的空白处,右键,找到 Run xxx.js 就是在WB中调取NODE环境执行我们的JS代码(目前在用WB)

    • 在当前JS所在的文件目录中打开DOS窗口,在DOS中执行 node xxx.js 也相当于把JS代码在NODE环境下执行了

    • NODE的REPL命令: 打开命令行,直接输入node出现 ‘ >’ 说明已经进入REPL,
      REPL(Read-Eval-Print Loop,简称REPL,“读取-求值-输出”循环)是一个简单的,交互式的编程环境。
      REPL既可以作为独立单机程序,也可以被其他的程序包含在内的程序。
      它提供了一种交互方式,即“执行程序,展现结果”。
      它可以被用作debugging,testing 或者只是执行操作得到一些结果。

    NODE的优势

    • 快:基于V8引擎渲染和解析的
    • NODE是单线程基于事件驱动的异步操作
    • NODE提供了无阻塞的I/O操作
      I/O:input/output 对文件的增删改查操作

    1、JS在客户端浏览器中运行的时候是否可以对客户端本地的文件进行I/O操作?
    答:不可以,因为我们要保证客户端的安全,JS做为前端开发语言是不可以操作客户端本地文件的,但是浏览器也提供了部分需要用户自主操作的功能,例如:上传图片等

    2、JS在服务器端NODE环境下运行的时候是否可以对服务器上的文件进行I/O操作?
    答:可以的。

    学习NODE从模块开始学起

    • 内置模块:自身自带的 http、url、fs 等
      • http:提供HTTP服务器功能。
      • url:用于解析URL。
      • fs:操作文件系统。
      • 其他
    • 自定义模块:自己编写的
    • 第三方模块:别人写好的,我们来调取使用
      • 安装NODE之后自带npm命令,用来管理第三方模块的。
      • 所有我们需要调取的第三方模块都在https://www.npmjs.com/这个网站中
    使用npm安装模块(分两种)
    
      1、安装到全局(global)
        npm install xxx(模块名字) -g
        npm uninstall xxx -g   //卸载已安装在全局模块
         // mac os 终端下需要在命令前加sudo
        sudo npm install xxx(模块名字) -g
        sudo npm uninstall xxx -g  
    
      2、安装在当前的项目下
        npm install xxx(模块名字)
        npm uninstall xxx 
    
    把模块安装到全局的问题:

    以后不管是在哪一个项目目录下,我们都可以"通过使用命令操作的方式"来进行操作,
    同时存在以下两个问题:

    1. 不能通过"代码导入的方式"使用这个模块;
    2. 安装在全局有很多时候会导致版本号冲突,例如:我之前安装的是LESS的2.7版本,以前的项目都是使用这个版本开发的,后来LESS升级了,升级到3.1,新版本和之前的版本不太一样,如果全局安装最新的,原来的项目就没办法使用LESS了
    把模块安装到当前项目中的问题:
    1. 不能像安装在全局一样使用命令了,但是可以使用JS导入的方式,正好与全局相反

    解决方案:在package.json 文件的scripts这个属性中进行配置

          "scripts": {  //->配置NPM脚本命令
                 "myScript": "lessc -v"   //检查version配置
           }
          //这样以后在终端中只需要执行npm run myScript,就也可以通过命令操作的方式执行lessc -v这个命令了
    
    1. 在当前的项目中会有一个node_modules文件夹,里面存储的都是我们当前项目所需要使用的模块(这个文件夹很大的,当需要传递给其他人时非常的不好处理)

    解决方案:上传gitHub的时候在项目目录中增加一个文件:.gitignore 这个文件中可以配置上传的时候忽略哪些文件,这些被忽略的文件就不在上传了

    3.我们把一些第三方模块安装在A项目下,B项目不能直接的导入使用,如果需要的话还需要在B项目中重新的下载安装一遍(通过npm install)

    解决方案:需要在安装第三方模块的时候,把当前项目 的所需要的模块清单写入到package.json的开发依赖项中(通 过以下命令)
    npm install xxx --save-dev 放在开发依赖模块清单中("devDependencies")
    npm install xxx --save 放在生产依赖的模块清单中("dependencies")

    再来一个B项目如果还是需要这些模块,我们就没有必要一个个的安装了,只需要把package.json文件拷贝到B项目中,然后执行 npm install 即可,这样的系统就会默认按照我们的开发依赖清单一个个的下载 =>"跑环境"
    那么package.json 长什么样呢?

    //我们平时在做项目开发的时候,首先会在当前项目的根目录路径的终端下执行:
     //npm init -y
    //这样执行完成后,会在当前项目的根目录下生成一个文件:package.json
       {
         "name": "20170222", //->项目名称
         "version": "1.0.0", //->项目的版本号
         "description": "", //->当前项目的描述
         "main": "temp.js", //->当前项目的主体(入口)
         "dependencies": {  //->当前项目依赖的第三方模块清单(生产:项目发布上线版本)
           "less": "^2.7.2"
         },
         "devDependencies": {}, //->当前项目依赖的第三方模块清单(开发:项目正在研发)
         "scripts": {//->命令脚本
           "test": "echo \"Error: no test specified\" && exit 1",
           "myScript": "lessc -v"
         },
         "keywords": [],
         "author": "",
         "license": "ISC"
       }
    

    在NODE环境下,它认为每一个JS都可以理解为一个单独的模块,所以我们创建模块只需要创建JS文件即可;并且每一个模块和模块之间是互不干扰的;

    模块与模块之间方法的互相调用:

    A模块:fn
    B模块:调取fn这个方法
    在node环境中,用require导入,
    在导入自定义模块的时候需要加上' ./ '才可以,此处是当前路径,根据具体路径添加。
    在导入第三方和内置模块的时候不能加' ./ '(特例)直接写,也不需要指定目录,直接写模块名即可,
    (它自己会先到node_modules中找已经安装的第三方模块,如果没有会到内置中找,如果再没有就报错了)

    var a = require('./A')   //  自定义模块
    var lessc = require('less') //第三方模块
    var http = require('http') //内置模块
    
    在A模块中 (A.js中)
    function fn(){
        console.log('my name is A')
    }
    //->把A模块中可以供其它模块调取使用的方法导出,只有这样其它的模块才可以调用
    module.exports = {
        fn:fn
    }
    
    在B模块中 (B.js中)
    // ->先导入A模块
    var a = require('./A')
    function fn(){
        console.log('my name is A')
    }
    a.fn();
    

    以上仅供为自己学习总结使用,同时希望理解后的知识能对他人有所帮助,如有不妥,还望指正!在此感谢!

    相关文章

      网友评论

        本文标题:初学NODE 学习笔记

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