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');