zoukankan      html  css  js  c++  java
  • node 知识点

    • 问:局部安装如何使用npm run命令?
      答:如果已局部安装了babel-cli(babel-cli自带babel-node命令),package.json文件配置如下:
    "scripts": {  
    "build": "./node_modules/.bin/babel-node index.js" 
    } 
    
    • 问:mac 下 node 如何升级?
      答:下载新版的 pkg 安装文件,双击直接安装即可。或使用node版本管理模块n:http://www.cnblogs.com/cag2050/p/7568637.html

    • 第一次加载某个模块时,Node会缓存该模块。以后再加载该模块,就直接从缓存取出该模块的module.exports属性。
      如果想要多次执行某个模块,可以让该模块输出一个函数,然后每次require这个模块的时候,重新执行一下输出的函数。
      所有缓存的模块保存在require.cache之中,如果想删除模块的缓存,可以像下面这样写。

    // 删除指定模块的缓存
    delete require.cache[moduleName];
    // 删除所有模块的缓存
    Object.keys(require.cache).forEach(function(key) {
        delete require.cache[key];
    })
    

    注意,缓存是根据绝对路径识别模块的,如果同样的模块名,但是保存在不同的路径,require命令还是会重新加载该模块。

    • 目录的加载规则:
      通常,我们会把相关的文件会放在一个目录里面,便于组织。这时,最好为该目录设置一个入口文件,让require方法可以通过这个入口文件,加载整个目录。
      在目录中放置一个package.json文件,并且将入口文件写入main字段。下面是一个例子。
    // package.json
    {
        "name" : "some-library",
        "main" : "./lib/some-library.js" 
    }
    

    require发现参数字符串指向一个目录以后,会自动查看该目录的package.json文件,然后加载main字段指定的入口文件。如果package.json文件没有main字段,或者根本就没有package.json文件,则会加载该目录下的index.js文件或index.node文件。

    • CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。
      AMD规范则是非同步加载模块,允许指定回调函数。
      由于Node.js主要用于服务器编程,模块文件一般都已经存在于本地硬盘,所以加载起来比较快,不用考虑非同步加载的方式,所以CommonJS规范比较适用。但是,如果是浏览器环境,要从服务器端加载模块,这时就必须采用非同步模式,因此浏览器端一般采用AMD规范。

    • require命令用于加载文件,后缀名默认为.js。
      根据参数的不同格式,require命令去不同路径寻找模块文件。
      (1)如果参数字符串以“/”开头,则表示加载的是一个位于绝对路径的模块文件。比如,require('/home/marco/foo.js')将加载/home/marco/foo.js。
      (2)如果参数字符串以“./”开头,则表示加载的是一个位于相对路径(跟当前执行脚本的位置相比)的模块文件。比如,require('./circle')将加载当前脚本同一目录的circle.js。
      (3)如果参数字符串不以“./“或”/“开头,则表示加载的是一个默认提供的核心模块(位于Node的系统安装目录中),或者一个位于各级node_modules目录的已安装模块(全局安装或局部安装)。
      举例来说,脚本/home/user/projects/foo.js执行了require('bar.js')命令,Node会依次搜索以下文件。

    /usr/local/lib/node/bar.js
    /home/user/projects/node_modules/bar.js
    /home/user/node_modules/bar.js
    /home/node_modules/bar.js
    /node_modules/bar.js
    

    这样设计的目的是,使得不同的模块可以将所依赖的模块本地化。
    (4)如果参数字符串不以“./“或”/“开头,而且是一个路径,比如require('example-module/path/to/file'),则将先找到example-module的位置,然后再以它为参数,找到后续路径。
    (5)如果指定的模块文件没有发现,Node会尝试为文件名添加.js、.json、.node后,再去搜索。.js件会以文本格式的JavaScript脚本文件解析,.json文件会以JSON格式的文本文件解析,.node文件会以编译后的二进制文件解析。
    (6)如果想得到require命令加载的确切文件名,使用require.resolve()方法。

    • 在Node.js中,可以使用 require.resolve 函数来查询某个模块文件的带有完整绝对路径的文件名,代码如下所示。
      require.resolve('./testModule.js');
      在这行代码中,我们使用 require.resolve 函数来查询当前目录下 testModule.js 模块文件的带有完整绝对路径的模块文件名。
      注意:使用 require.resolve 函数查询模块文件名时并不会加载该模块。

    • 入口文件app.js里的路由,按顺序执行;

    • 根据CommonJS规范,一个单独的文件就是一个模块。每一个模块都是一个单独的作用域,也就是说,在该模块内部定义的变量,无法被其他模块读取,除非定义为global对象的属性。

    • global:全局命名空间,通过 global 定义的变量,在任何地方都可以使用,类似于浏览器端定义在全局范围中的变量。
      定义在 global 上面的变量,不需要在模块中通过 exports 输出,其他模块中也能使用。

    • node中定义全局变量,不应该使用global,而应该使用模块。
      举例:
      文件 main.js:

    exports.company = 'Google';  
    var m = require('./mod'); 
    

    文件 mod.js:

    var company = require('./main').company;  
    console.log(company); 
    

    执行结果:

    $ node main.js  
    Google 
    
  • 相关阅读:
    部署openstack的官网文档解读mysql的配置文件
    ubuntu14.04行更新软件包
    Ubuntu14.04上修改主机名
    ubuntu上修改root密码
    在ISE查看各个模块消耗的资源
    132
    Aurora 8B/10B、PCIe 2.0、SRIO 2.0三种协议比较
    NAND flash和NOR flash的区别详解
    FPGA三分频,五分频,奇数分频
    以太网之物理层
  • 原文地址:https://www.cnblogs.com/cag2050/p/7567378.html
Copyright © 2011-2022 走看看