模块化
在node中,一个js文件就是一个模块化,文件路径就是模块名。到底什么是模块化呢?原生的模块化就相当于使用jq前引入jq的相关文件,如果引入js的顺序发生改变可能下面的js模块一个也不能使用。为了解决这一问题,node提出了模块化系统(类似java语言的标准库)。在node中,模块分为两种,核心模块(node提供的模块)和文件模块(用户自己编写的模块)。
- 定义一个模块:
/*
模块的定义
在node中,每一个js文件中的js代码都是独立运行在一个函数中
*/
function add(a,b){
return a+b;
}
/*
模块接口的暴露
只需要将要暴露的属性和方法,赋值给exports的属性即可
*/
exports.age="20";
- 引入其他模块:
/*
在node中,通过require引入外部模块
require()可以传递一个文件的路径作为参数,node将会自动根据路径引入不同的外部模块
这个路径可以是相对也可以是绝对路径
如果使用相对路径必须使用./..开头
require()会返回一个对象,该对象代表引入的那个模块,通过这个对象使用其他模块中的属性
*/
var md=require("./tool");
console.log(md.name);
页面函数
/*
在node中又一个全局变量global,与网页的window类似
在全局变量中的属性和方法都会变成global的属性和方法
arguments.callee
这个对象保存的是当前执行的函数对象
*/
console.log(arguments.callee);//[Function]
console.log(arguments.callee+"");
/*
打印出当前页面的所有内容,并且在代码顶部添加
function(exports,require,module,_filename,_dirname){
在代码底部添加
}
实际上模块中的代码都是包装在一个函数执行的,并且在函数执行时,同时传递了5个实参
exports:该对象用来将变量或函数暴露到外部
require:函数,用来引入外部的模块
module:代表的是当前模块
filename:当前模块的完整路径
dirname:当前模块所在文件夹的路径
*/
console.log(__filename);//E:\火图网\node\modeul.js
console.log(__dirname);//E:\火图网\node
/*
module代表的是当前模块本身
exports就是module的属性
既可以使用exports导出,也可以使用module.exports导出
exports 和 module.exports的区别:
exports只能通过.的方式向外暴露属性和方法
exports.xxx=xxx;
module.exports可以通过.的方式也可以直接赋值
module.exports.xxx=xxx;
module.exports=xxx;
*/
console.log(exports==module.exports);//true
npm的命令
- npm -v查看npm的版本
- npm version查看所有模块的版本
- nprn search包名搜索包
- npm install/i包名安装包
- npm removelr包名删除包
- npm install包名–save安装包并添加到依赖中七士需
- npm install下载当前项目所依赖的包
- npm install包名-g全局安装包(全局安装的包一般都是一些工具
对于npm下载较慢的问题我们可以使用淘宝的npm镜像,通过npm下载的包都放在node_modules的文件夹中,使用时直接引入包名即可.
如果要了解更多可以参考:npm详解