常见用法:在data.js文件中定义
var dataPost = {
"seller": {
"name": "粥品香坊",
"description": "蜂鸟专送",
"deliveryTime": 38,
"score": 4.2,
"serviceScore": 4.1,
},
}
module.exports={
myDataPost: dataPost // 对外暴露的变量名叫myDataPost,对应着内部的dataPost对象
}
在index.js中调用:
let Data = require('../../data/data.js'); // 引入公共代码
var dataList = Data.myDataPost.seller; // 开始通过对外暴露变量myDataPost,访问内部dataPost对象
微信开发中,可以将一些公共的代码抽离成为一个单独的 js 文件,作为一个模块。模块只有通过 module.exports
或者 exports
才能对外暴露接口。
需要注意的是:
- 推荐开发者采用
module.exports
来暴露模块接口。 - 小程序目前不支持直接引入
node_modules
, 开发者需要使用到node_modules
时候建议拷贝出相关的代码到小程序的目录中。
// common.js
function sayHello(name) {
console.log(`Hello ${name} !`)
}
function sayGoodbye(name) {
console.log(`Goodbye ${name} !`)
}
module.exports.sayHello = sayHello
exports.sayGoodbye = sayGoodbye
在需要使用这些模块的文件中,使用 require(path)
将公共代码引入
var common = require('common.js')
Page({
helloMINA: function() {
common.sayHello('MINA')
},
goodbyeMINA: function() {
common.sayGoodbye('MINA')
}
})
Tips
tip
: require 暂时不支持绝对路径- require 用来加载代码,而 exports 和 module.exports 则用来导出代码。
其他例子:
1、返回一个JSON Object
var app = {
name: 'app',
version: '1.0.0',
sayName: function(name){
console.log(this.name);
}
}
module.exports = app;
这种方法可以返回全局共享的变量或者方法。
调用方法:
var app = require('./app.js');
app.sayName('hello');//hello
或者这样用:
var func1 = function() {
console.log("func1");
};
var func2 = function() {
console.log("func2");
};
exports.function1 = func1;
exports.function2 = func2;
调用方法为:
var functions = require("./functions");
functions.function1();
functions.function2();
2、返回一个构造函数
CLASS.js:
var CLASS = function(args){
this.args = args;
}
module.exports = CLASS;
调用:
var CLASS = require('./CLASS.js');
var c = new CLASS('arguments');
3、返回一个实例对象:
//CLASS.js
var CLASS = function(){
this.name = "class";
}
CLASS.prototype.func = function(){
alert(this.name);
}
module.exports = new CLASS();
调用:
var c = require('./CLASS.js');
c.func();//"class"
exports 和 module.exports 的区别
exports就是module.exports的引用
- module.exports 初始值为一个空对象 {}
- exports 是指向的 module.exports 的引用
- require() 返回的是 module.exports 而不是 exports