模块介绍
- 导入模块
- require(模块名)
- 自定义模块
./模块.js
引用(.js可以省略)
- 核心模块
- 本质也是文件
- 按模块名加载即可
- 第三方模块
- 必须通过npm下载
- 不能与核心模块名称一致
- 当前目录下node_modules目录存放下载的模块
- 模块/package.json/main属性记录了模块入口
- 如果package.json不存在或者没有main属性,默认加载index.js,如果不存在,则加载上一级的node_modules目录,直至找到加载入口
exports
- 默认模块作用域,模块所有的成员只在模块内部有效
- 要其他模块可以访问,需要挂载到exports
//main.js
//reuire默认得到对象
var forExports = require('./foo');
console.log(forExports);
//foo.js
var foo = 'bar';
function add(x,y){
return x+y;
}
//只有加入exports对象中才能在外部调用
exports.add = add;
//exports可以添加多个参数对象
exports.str = 'hello';
//其他(导出对象)
exports.a = 123;
exports.b = 'hello';
exports.c = function(){
console.log('ccc');
}
exports.d = {
foo:'bar'
}
//其他(导出单个成员)
//module.exports - 'hello';
//多个module.exports,后者会覆盖前者
module.exports = function(){}
如果需要直接require导出某个成员,而非对象,直接使用module.exports = add;
原理解析
//在模块中有一个默认module对象
//module中有一个默认空的exports对象
//在模块最后有个默认```return module.exports```
//挂载对象到module.exports,即可通过require得到
//模块中还有var exports = module.exports代码,可以使用两者来挂载
//所以不能对exports重新赋值,会断开与module.exports的连接
//moudle.exports重新复制也会断开与exports的连接,可以再次连接
/*
var module = {
exports :{
}
}
var exports = module.exports;
return module.exports;
*/
require
- 执行模块中的代码
- 得到被加载模块中的exports导出的接口对象
npm
- npm package manager
- 建议每个项目都创建一个package.json文件(包管理文件)
npm init
自动创建并初始化npm install --save jquery
自动加载包并将依赖项填写到package.js文件
- 常用项
- npm init
- npm install 包名
- npm install 包名 --save
- npm i -S 包名
- npm uninstall --save 包名
- npm un -S 包名
- npm help
- npm uninstall --help
- 镜像网站
- http://npm.taobao.org
- npm install – global cnpm
- 加载安装淘宝npm镜像,以后使用cnpm
- 另一种
- npm config set registry https://registry.npm.taobao.org
Path
- 专门用来操作路径
#获取文件名
path.basename('路径',‘指定需要去除的后缀名’);
#获取文件目录
path.dirname('路径');
#获取扩展名
path.extname('路径');
#判断是否是绝对路径
path.isAbsolute('路径');
#路径拼接
path.join('c:/a','/b');
#路径解析为对象
path.pares('路径');
__dirname
- 当前文件的所属目录
console.log(__dirname);
__filename
- 当前文件的路径
console.log(__filemane);