CommonJs 和 Nodejs 中自定义模块

JavaScript标准定了的API是为了构建基于浏览器的应用程序,并没有制定一个用于更广泛的应用程序的标准库。CommonJs规范的提出主要就是为了弥补当前JavaScript没有标准的缺陷。

Nodejs的终极目标是提供类似Python,Rudy和Java语言的标准库,而不只是停留在小脚本程序阶段。CommonJs是模块化的标准,nodejs就是CommonJs模块化的实现。

在 Node 中,模块分为两类,一类是核心模块,是node提供的;另一类是用户编写的,成为文件模块;
》》核心模块 :HTTP 模块 、URL 模块、Fs 模块都是 nodejs 内置的核心模块,可以直接引入使用。
》》文件模块:文件模块则是在运行时动态加载,这些模块需要我们自己定
新建一个js,然后将改js中的内容exports,就可以在其他文件中引入使用

// 定义一个 tools.js 的模块 //模块定义
var tools = {
  sayHello: function() { 
    return 'hello NodeJS';
  },
  add: function(x, y) { 
    return x + y;
  } 
};
// 模块接口的暴露
exports.sayHello = tools.sayHello; 
exports.add = tools.add;

在需要引入的js中require

// 引入自定义的 tools.js 模块
var tools= require('./tools');
tools.sayHello(); //使用模块

如果将模块放入的node_modules,引入可以写成

var tools= require('tools');

因为nodejs如果找不到该模块,就自动默认进入node_modules中去寻找。
但是如果在tools之前有一个目录,比如目录结构变成node_modules/tools/tools.js,直接写成require('tools');,程序是找不到的,只能写成require('tools/tools');
但是如果使用 package.json即可以解决;解决方式:
在tools目录下使用命令 npm init --yes,会生成一个 package.json,内容大致如下:

{
  "name": "tools",
  "version": "1.0.0",
  "description": "",
  "main": "tools.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

这时的导入可以直接写成require('tools');

你可能感兴趣的:(CommonJs 和 Nodejs 中自定义模块)