什么是需要使用" module.exports"的js文件之间的区别?和一个常见的js文件?

时间:2016-02-20 01:00:34

标签: javascript node.js module gulp

我认为这是一个简单的问题,但我没有找到客观答案。

我从NodeJS开始,我不太了解模块在Node中的工作方式。所以,我试图模块化我的Gulp任务,并尝试使用Node模块require()和这些代码:

gulpfile.js:

var gulp = require('gulp');
require('./gulptasks/foo');

gulp.task('default', ['foo'], function() {

});

foo.js:

var gulp = require('gulp');

  gulp.task('foo', function() {
    console.log('bar');
});

模块化的另一种方式:

gulpfile.js:

var gulp = require('gulp');
var foo = require('./gulptasks/foo')(gulp);

gulp.task('default', ['foo'], function() {

});

foo.js:

module.exports = function(gulp) {
  gulp.task('foo', function (){
    console.log('bar');
  });
};

模块化我的js文件的正确方法是什么?为什么(当我使用module.exports时,我猜它是关于范围的?)

好奇心:

为什么会起作用:

gulpfile.js:

var gulp = require('gulp');
require('./gulptasks/foo')(gulp);

gulp.task('default', ['foo'], function() {

});

foo.js:

var gulps = require('gulp');

module.exports = function() {
  gulps.task('foo', function (){
    console.log('bar');
  });
};

观测值:

此代码仅在我从gulpfile.js传递gulp引用到foo.js时才有效,尽管我的模块函数没有接收参数。 :

require('./gulptasks/foo')(gulp);

我已经将gulp变量名称改为gulps进行测试,如果它是覆盖变量的话。我不知道它是如何工作的,因为我不使用gulpfile.js中的gulp参考,如果我从那里通过gulp它就会起作用。

0 个答案:

没有答案