模块导入导出的方法
1. CommonJS中的exports require module.exports
-
commonJS对于模块的定义分三部分,模块的导入,模块的导出,模块的标识
模块的标识: require方法里面的参数。最好是小驼峰命令的。可以是./ ../等相对路径,也可以是绝对路径
-
模块的导出:commonJS中module对象有一个exports方法,可以把文件作为一个模块导出。
// module.exports 是导出函数 module.exports = function() {} // 不可以 // test.js exports.hello = 'world'; // index.js var hello = require('./text') //如果没有添加后缀名,node会默认添加.js .json .node console.log(hello); //{hello : 'world'} // test1.js 同时使用module.exports exports module.exports = { a: 'a'} exports.h = 'hh' //如果同时使用module.exports和exports ,由于exports是module的一个属性,所以会被module.exports 覆盖 // index.js var re = require('./test1'); console.log(re) // {a :'a' } // test2.js 导出多个接口 exports.str = 'hh' exports.obj = {name: 'hcc',age: 22} exports.fun = function(data) {console.log(data)}; // index.js var obj = require('./text2'); console.log(obj) //{ hello: 'world', obj: { hh: 'ff' }, bb: [Function] }
-
模块的导入
模块的导入分二个不同的模块 1. 核心模块 2. 自定义模块(文件的导出就是自定义)
node自带一些核心模块,方便和操作系统进行互动
常见的核心模块
- http 提供HTTP服务器功能
- fs 和文件系统交互
- path 处理文件目录
- querystring 解析URL的查询字符串
// 核心模块和自定义模块的导入是不一样的。核心模块总是被优先加载的 // 如果只有名称没有相对路径,默认会加载核心模块,所以一般加载自定义模块的时候添加相对路径。 var http = require('http'); console.log(http) //它会导出一个http的对象 const package = require('./package') //如果有package.js就优先加载,没有的话就寻找package.json
如果我们想导入一个文件夹呢? require会首先默认查看package.json中的main的入口文件,如果没有继续寻找index.js文件,如果都没有的话,就会报错。
2. ES6 的export 和 import 的模块导入导出
由于node还不支持使用export import 导入导出,所以我们配置了webpack的编译环境
export导出包括默认导出和通过变量导出
-
import 对于使用不同的export和export default有2中情况
// test.js // 使用export的时候,需要配合变量,以便于import导入 export var str = 'hcc' export var obj = {age: 22} export function fun(){console.log('fun')} // index.js // 1.当使用export的时候,我们可以通过* 全部引用,但是* 不好使用,需要一个别名 import * as obj from './test'; console.log(obj); {str: 'hcc', obj: {age: 22}, fun: funciton()....} // 可以使用ES6 解构赋值 import {str,obj,fun} from './test' // str="hcc" obj={age:22} fun=function..... // 使用export default 就不需要使用变量名 // test.js export default function(){ console.log('export'); } // index.js import fun from './test.js' console.log(fun); // function() {console.log('fun')}; // 使用export default 导出一个对象 // test.js export default { str: 'hcc', fun: function(){console.log(fun)}; obj: {str: 1} } //index.js import obj from './test.js' console.log(obj) // 输出一个对象{str: "hcc", obj: {str: 1},fun:function....} // 同时使用export和export default // test.js export function fun() { console.log('hh'); } export var str = 'hcc'; export var obj = {age: 22}; export default { a: 1, fun: function(){ console.log('fun') }, obj: {str: 'hhhh'} } //index.js import default, {str, obj, fun} from './test.js'; console.log(default); // {...} console.log(str) // hcc console.log(obj) // {age: 22} console.log(fun) // function() {console.log('fun')}
3. nodemon 模块可以更新npm script的命令
1. 安装模块 npm install --save-dev nodemon 2. 使用 "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "nodemon index.js", }, npm start // 会实时更新运行node index