Skip to content
此页目录
本文总阅读量

node.js 模块引入

require 引入模块-commonjs规范

核心模块

js
require('http');// 引入 http 模块
  • 引入的模块会先从当前目录 node_modules 找,没有继续往上一级目录找,直到根目录,没有则报错
  • 文件模块:一个模块就是一个js文件
  • 引入的是路径必须以 ./ 或 ../ 开头
  • 引入后返回一个对象,返回的就是引入模块的返回值
js
var md = require('./02-module.js');// 引入本地模块 .js可以省略

每一个 js 文件模块都有一个文件作用域,无法返回引入模块的变量

exports 暴露给外部的变量

js
exports.变量名 = '';// 另一个文件即可访问该变量

引入自定义模块

  1. node_modules 下文件夹名字为模块名字, require 引入文件夹名字
  2. nodejs会自动找到文件夹下的 index.js 文件。如果不是 index 会报错
  3. 修改模块文件夹下 package.json 的 main 参数可以设置引入时的 index 为其他名字

模块的参数

js
console.log(arguments.callee + ''); // 当前函数 + '' 隐式调用 toString
  // 函数最开始添加此代码
function (exports, require, module, __filename, __dirname) {
  console.log(arguments.callee + '');
  // 函数结尾添加此代码
}

实际上模块中运行的代码都包装在一个函数中,并在执行时传递5个实参

  • require:函数,用来引入外部的模块
  • exports:将对象或变量暴露到外部
  • module
    • module 代表这个函数的本身
    • exports 就是 module 的属性
    • 既可以使用 module.exports 导出,也可以使用 exports 导出
js
module.exports == exports;// true
  • __filename:

e:\Web\Node\createHttp.js

​ 当前文件所在路径

  • __dirname:

​e:\Web\Node

​ 当前文件夹所在路径

exports

exports是module.exports的引用,module.exports是真实存在的,最终返回的是module.exports

js
// 可以用
exports.name = 'xx';

// 不可用
exports = { /* 代码 */ } 
// 赋值对象会改变引用地址,实际的 module.exports 对象内的值并没有被修改

// 可用
module.exports.name = 'xx';

// 可用
module.exports = {/* 代码 */}

module = { exports: {} };
exports = module.exports;

exports.age = 22;
console.log(exports, module.exports);

module.exports = {};
console.log(exports, module.exports);

package.json

js
dependencies:{} 依赖,此包依赖另外的哪些包 类型jq插件依赖jq
description: '' 描述
devDependencis: {} 开发环境依赖,生成环境不依赖
homepage: 'http...' 主页
license: '' 权限
main: ''主文件
maintainers: {} 主要贡献者
contributors: 维护者
bugs: 提交bug地址
name: '' 包的名字
version: 版本
keywords: 关键字
repositories: 仓库
os: 系统
"scripts": {
  "start": "node ./bin/www", // 用 npm start 启动www.js 只有键为start可以省略 run
  "dev":"nodemon ./bin/www" // 用npm run dev 启动 www.js 
}

评论

交流群