var 自定义变量名 = require('模块');
exports
导出接口对象例如:main.js,优先从缓存加载,由于 在 a 中已经加载过 b 了,所以 这里不会重复加载
,可以拿到其中的接口对象,但是不会重复执行里面的代码, 这样做的目的是为了避免重复加载,提高模块加载效率
require('./a.js');
var fn = require('./b');
console.log(fn);
a.js
console.log("a.js被加载");
var fn = require('./b');
console.log(fn);
b.js
console.log("b.js被加载");
module.exports=function(){
console.log(fn);
}
require('模块标识');
npm
的方式来下载require('包名')
的方式来进行加载才可以 使用先找到当前文件所处目录中的node_modules目录
然后node_modules/art-template
最后找到node_modules/art-template/package.json文件中的main属性
然后main属性,记录了art-template的入口模块
如果package.json文件不存在或者没有main属性,那么就加载默认备选项 index.js
exports
接口对象中就可以导出多个成员exports.a = 123;
exports.b ='hello';
exports.c=function(){
console.log('ccc');
}
module.exports='hello';
以下情况会覆盖
module.exports='hello';
//下面的会覆盖之前的hello
module.exports=function(x,y){
return x+y;
}
moudle.exports.xxx = xxx
的方式moudle.exports.xxx = xxx
很麻烦exports
exports === module.exports
结果为 true
moudle.exports.xxx = xxx
的方式 完全可以:expots.xxx = xxx
module.exports = xxx
的方式exports = xxx
, 因为这样不管用return
的是module.exports
exports
只是 module.exports
的一个引用exports = xx
重新赋值,也不会影响 module.exports
exports = module.exports
这个用来重新建立引用关系的,而和之前的 exports
就没有关系了exports只是一个module.exports的引用
,尽量不要破坏他们之间的引用关系就好了
package.json文件记录项目中所需要的所有模块。 当执行npm install
的时候,node会先从package.json文件中读取所有dependencies信息,然后根据dependencies中的信息与node_modules中的模块进行对比, 没有的直接下载,已有的检查更新
另外,package.json文件只记录通过npm install方式安装的模块信息,而这些模块所依赖的其他子模块的信息不会记录。
npm init
命令生成包描述文件,在dos窗口里面 必须切换到要安装的目录,就会安装在那里
傻瓜式一路next,如下图:
包说明文件
{
"name": "feed_back",
"version": "1.0.0",
"description": "留言板项目",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "jingzh",
"license": "ISC",
"dependencies": {
"jquery": "^3.4.1"
}
}
npm 5
以前是不会有 package-lock.json
,在5之后才加入了这个文件node_modules 或 package.json
发生变化时自动生成的文件。npm5
之后的版本不需要添加— — save
,它就会自动保存这个依赖信息当执行npm install的时候,node从package.json文件读取模块名称,从package-lock.json文件中获取版本号
,然后进行下载或者更新