我认为这是一个简单的问题,但我没有找到客观答案。
我从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它就会起作用。