node学习day1
关键字: 全局对象global 模块module 对外exports
文件路径__filename 文件目录路径__dirname
node的模块加载机制
node没有window对象,其全局对象为global
每个文件中的变量和函数并不挂载在global对象中,而是挂在在其所在的文件下
- 一个文件就是一个模块
- 声明全局变量的方式为: global.变量名
- node通过 require 引入模块
- require() 总是会优先加载核心模块
- 查找相同名字的文件
- 如果查不到,则加上后缀.js进行查找
- 如果查不到,则加上后缀.js.json进行查找
- 如果查不到,则加上后缀.node进行查找
- 如果给定的路径不存在,则 require() 会抛出一个 code 属性为 ‘MODULE_NOT_FOUND’ 的 Error。
模块
每个文件就是一个模块,每个模块都是一个module对象,它具有exports属性,可以对外暴露接口,
使引入该模块的模块可以使用此模块的数据
“`js
var plane = require ('plane.js') //引入模块,返回的值就是一个module对象
plane.file() //假如这个引入的plane模块有一个file()函数,则可以如此调用,变量亦是如此
plane.a
console.log( __dirname ); //返回当前 <文件所在目录> 的绝对路径
console.log( __filename ); //返回当前 <文件> 所在的绝对路径
目录作为模块
可以把程序和库放到一个单独的目录,然后提供一个单一的入口来指向它。 把目录递给 require() 作为一个参数,有三种方式。
第一种方式是在根目录下创建一个 package.json 文件,并指定一个 main 模块。 例子,package.json 文件类似:
{ “name” : “some-library”,
“main” : “./lib/some-library.js” }
如果这是在 ./some-library 目录中,则 require(‘./some-library’) 会试图加载 ./some-library/lib/some-library.js。
这就是 Node.js 处理 package.json 文件的方式。
注意:如果 package.json 中 “main” 入口指定的文件不存在,则无法解析,Node.js 会将模块视为不存在,并抛出默认错误:
Error: Cannot find module ‘some-library’
如果目录里没有 package.json 文件,则 Node.js 就会试图加载目录下的 index.js 或 index.node 文件。 例如,如果上面的例子中没有 package.json 文件,则 require(‘./some-library’) 会试图加载:
./some-library/index.js
./some-library/index.node