NodeJS 学习笔记

前言: 关于NodeJS

Chrome V8 Javascript 引擎上的运行时(runtime)。官方网站 http://nodejs.org , 开源地址 https://github.com/nodejs/node

第二章 安装配置

  • 2.1 安装及配置

    均去官网下载对应的系统版本进行安装,下载地址 https://nodejs.org/en/download/

    • 2.1.1 Windows 下安装

      下载对应的 msi 或 exe 文件,双击安装,如下图,一并安装的还有 Node 包管理器 (Node Package Manager 又叫 NPM)

      可以自由的选择安装位置

      选择安装的内容

      多个下一步后,完成安装,安装位置是上图中你定义的位置。

      在命令行中运行 node -v, 可以看到你所安装的 nodejs 的版本,运行 npm -v 则可以看到你的 NPM 的版本。

    • 2.1.2 Mac OSX 下安装

      下载对应的 APK 文件,双击安装,如下图,一并安装的还有 Node 包管理器

      在多个继续的点击后,进入最后一步

      可以看出,Node 的安装位置是 /usr/local/bin/node,而 NPM 的安装位置是 /usr/local/bin/npm

      在终端中运行 node -v, 可以看到你所安装的 nodejs 的版本,运行 npm -v 则可以看到你的 NPM 的版本。

      还可以通过 homebrew 来安装,访问 http://brew.sh/ 安装好 homebrew 后,在终端中输入 brew install nod 即可安装

    • 2.1.3 Linux 下安装

      一般情况下,可以通过不同的发行版本直接安装,比如 Debian/Ubuntu 就可以直接用 sudo apt-get install nodejs 来安装,其他发行版本类似。

      也可以用 nvm 来安装,先执行 wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install.sh | bash 安装 nvm,然后直接安装 nodejs 即可。

      常用的 nvm 命令

      nvm ls 列出本地已经安装的node版本
      nvm ls-remote 列出所有的node版本
      nvm install --lts 安装lts版本
      nvm install  安装指定版本
      nvm use  使用指定版本
      nvm help  查看帮助 
      
    • 2.1.4 编译源码安装

      因为 Linux 发行版本时间的缘故,有时候需要通过编译源码来安装,Windows 和 Mac OSX 下也可以编译源码的方式安装,但这里只介绍 Linux 下编译源码安装,以 Ubuntu 为例

      • 安装基本工具 g++ 编译 Node.JS,命令 sudo apt-get install g++

      • python 基本系统已经预置,版本需要 2.5+

      • libssl-dev 提供 SSL/TLS 加密的支持,命令 sudo apt-get install libssl-dev

      • 下载并编译源码安装 将源码下载到系统系统中某一个地方,比如 ~ 目录下

        wget https://nodejs.org/dist/v4.4.4/node-v4.4.4.tar.gz 
        tar -xvf node-v4.4.4.tar.gz 
        cd node-v4.4.4 
        ./configure 
        sudo make 
        sudo make install 
        

        完成安装。如同上面的操作,查看 nodejs 和 npm 的版本。

  • 2.2 Node 包管理器

    Node 包管理器 (Node Package Manager 又叫 NPM),Node.JS 0.6 版本后,已经包含在 Node.JS 的发行包中,在安装 Node.JS 的同时会自动安装。如果你想手动安装,执行一下命令

    curl http://npmjs.com/install.sh | sudo sh
    

    完成安装,更多的新版本的获取可以访问官网 http://npmjs.com

  • 2.3 多版本理器

    因为 Node.JS 版本更新速度快,会存在新旧版本不兼容等问题,这时候需要用到了 Node.JS 的多版本管理器。直接通过如下命令安装

    git clone https://github.com/tj/n.git //从服务器上 clone 到电脑端
    cd n //进入文件夹
    make install //安装
    

    安装完成后,可以在 /usr/local/bin/n 中看到相关的文件,更多命令通过 n --help 查看。也可以通过命令 sudo npm install -g n 直接安装。如果需要升级 nodejs 版本,则使用命令 sudo n stable 来安装最新稳定版。有时候需要执行命令 sudo npm cache clean -f 清理缓存。

第三章 Node.JS 基础知识

  • 3.1 Hello World

    用任意编辑器新建一个文件,命名为 helloworld.js,里面写入如下内容

    console.log('hello world');
    

    console.log 将在后面详细讲解

    在终端中进入 helloworld.js 文件所在的文件夹,执行

    node helloworld.js
    

    这时你会在终端中看到 hello world 文字的出现。这就是运行 Node.JS 程序最基本的方法。

    更多的关于 Node 的用法,可以通过 node --help 查看。

  • 3.2 模块

    模块 (Module) 是 Node.JS 的基本组成,通常一个文件就是一个模块,通过 require 这个对象加载到程序中

    var http = require('http');
    

    这就是加载 http 这个模块。

    • 3.2.1 模块的创建和加载

      通过 exports 这个对象来创建,exports 是模块公开的接口

      var name; //定义一个变量
      exports.setName = function(thisName) {
        name = thisName;
      };
      exports.useName = function(){
        console.log('hi ' + name);
      };
      

      这里完成了一个模块的设计,保存文件为 module-name.js,通过 exports 这个对象把 setName 和 useName 设置为模块的访问接口。

      如上面所说,通过对象 require 加载到程序中进行使用

      var nameModule = require('./module-name'); //模块的位置,该程序文件和模块文件在同一个文件夹下
      nameModule.setName('tc'); //调用函数,有参数
      nameModule.useName(); //调用函数,无参数
      

      保存文件为 name.js,执行该文件 node name.js 会得到结果 hi tc

      需要注意的是,无论加载多少次 Module,最后的的输出结果都是由最后一个所确定,如

      var nameModule1 = require('./module-name');
      nameModule1.setName('tc');
      
      var nameModule2 = require('./module-name');
      nameModule2.setName('tcoder');
      
      nameModule1.useName();
      

      保存文件为 name2.js,执行得到的结果是 hi tcoder ,而不是 hi tc

    • 3.2.2 单一对象的模块创建

      只把一个对象封装到模块中,如

      function sayHi() {
        var name;
        this.setName = function(thisName) {
          name = thisName;
        };
        this.useName = function() {
          console.log('hi ' + name);
        };
      };
      module.exports = sayHi; //简化后的方式,复杂写法是 exports.sayHi = sayHi;
      

      保存文件为 sayhi.js,加载该文件

      var sayHiC = require('./sayHi');
      sayHello = new sayHiC();  //创建一个新对象
      sayHello.setName('tc');
      sayHello.useName();
      

      保存文件为 sayhic.js,执行该文件,同样可以得到 hi tc 这个结果。

  • 3.3 包

    • 3.3.1 包的创建

      包类似于函数库,类库,将镀铬功能封装起来,用于发布更新依赖管理和版本控制,Node.JS 根据 CommonJS 规范实现了包机制,用上面提到的 NPM 来管理包。按 CommonJS 严格规范,包主要有下面的内容组成

      • package.json 必须放在包的最顶层目录下

      • 二进制文件必须放在 bin 目录下

      • Javascript 代码放在 lib 目录下

      • 文档放在 doc 目录下

      • 单元测试放在 test 目录下

      前面说到的文件和模块是一一对应的,同样文件夹还可以是作为文件而被使用,基本的包就可以视为是一个文件夹的模块,比如,创建一个文件夹叫 apackage,在这个文件夹下创建一个 index.js 的文件

      exports.bao = function () {
        console.log('hi package');
      };
      

      如同模块的写法一样。在 apackage 这个文件夹外,创建一个新文件命名为 testpackage.js

      var pg = require('./apackage');
      pg.bao();
      

      运行该文件,可以得到 hi package,这个结果。这个就是如何把一个文件夹封装成一个包。

    • 3.3.2 package.json 文件

      package.json 文件可以理解为包的配置文件,它定义了包的一些相关的信息,Node.JS 程序在调用一个包是 package.json 文件起了很重要的作用。更多关于它的说明请访问 https://docs.npmjs.com/files/package.json 本文件可以通过包管理工具 NPM 创建,npm init即可创建一个 package.json 的文件。

    • 3.3.3 包的安装和管理

      包的管理由 NPM 搞定,安装包也非常方便 npm install package_name 即可完成包的安装,此时这种安装是安装在当前的目录下的,会自动生成一个 mode_modules 的文件夹,如果想安装全局模式的包则运行 npm install -g package_name,加上 -g 这个参数。

      注意:如果全局安装了,则不可以用 require 来进行使用,但可以 npm link 来消除这个限制 ,如果全局安装了amodule,则 npm link amodule 即可

update@20180507 : Nodejs 项目调试

最近在用 nodejs,koa,ejs 开发一个网站项目时总遇到一些问题,调试就显得非常重要,这里记录下一些调试的方式。

官方指南

Node.js 官方给出了一些调试指南的,查看这里,已经非常全面。

  • VSCode

    点击左侧的 Debug,然后点击顶部的 Setting (齿轮),输入 node.js,在弹出的文件 lanuch.json 中更改 Program 路径为自己的执行的文件路径,如下

    {
        // Use IntelliSense to learn about possible attributes.
        // Hover to view descriptions of existing attributes.
        // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
        "version": "0.2.0",
        "configurations": [
            {
                "type": "node",
                "request": "launch",
                "name": "Launch Program",
                "program": "${workspaceFolder}/app.js"
            }
        ]
    }
    

    最后点击顶部绿色的运行按钮开始运行即可。

请注意:这里的内容都是原创,你可以免费阅读,但拒绝所有其他任何形式的转载,谢谢配合。如果你发现文章中有错误,请发邮件给我,非常感谢。

The Copyright of all posts & photos posted in tourcoder.com is belong to tourcoder.com. You can read them for free, but you may not reuse anything therein without my permission.