【问题标题】:Import / read variable from separate gulp file从单独的 gulp 文件导入/读取变量
【发布时间】:2016-12-10 06:03:12
【问题描述】:

我希望将我的 gulpfile.js assetssrc 变量拆分为单独的文件,以便更好地管理它们。例如:

....

var scripts = ['awful.js', 'lot.js', 'of.js', 'js.js', 'files.js']

....(somewhere down the line)

gulp.task('vendorjs', function() {
    return gulp.src(scripts)

        .pipe(concat('vendor.js'))
        .pipe(rename({suffix: '.min'}))
        .pipe(uglify())
        .pipe(gulp.dest(paths.root + 'dist'))
        .pipe(notify({ message: 'vendorjs task completed' }));
});

如果有办法将scripts 变量实际移动到单独的文件并能够从gulpfile.js 访问它,那么我基本上感兴趣。

我一直在研究类似的东西:

require("fs").readFile('gulp/test.js', function(e, data) {
   //(test.js would be the file that holds the scripts var)
});

但是,虽然它确实读取了文件的内容,但我仍然无法从 gulpfile.js 访问它。非常感谢任何提示或想法。

【问题讨论】:

    标签: javascript gulp fs


    【解决方案1】:

    Node.js 允许您使用require() 导入其他文件。支持three types of files

    • JSON 文件。请参阅DavidDomain's answer
    • 二进制 Node.js 插件。对您的用例没有用处。
    • JavaScript 文件。这就是你想要的。

    对于 JavaScript 文件,从 require() 返回的值是在导入文件中分配给 module.exports 的值。

    所以对于您的用例:

    gulp/test.js

    var arrayOfFiles = ["awful.js", "lots.js"];
    arrayOfFiles.push("of.js");
    arrayOfFiles.push("js.js");
    arrayOfFiles.push("files.js");
    for (var i = 0; i < 10; i++) {
      arrayOfFiles.push("some_other_file" + i + ".js");       
    }
    
    module.exports = {
      scripts: arrayOfFiles
    };
    

    gulpfile.js

    var test = require('gulp/test.js');
    
    gulp.task('vendorjs', function() {
      return gulp.src(test.scripts)
        .pipe(concat('vendor.js'))
        .pipe(rename({suffix: '.min'}))
        .pipe(uglify())
        .pipe(gulp.dest(paths.root + 'dist'))
        .pipe(notify({ message: 'vendorjs task completed' }));
    });
    

    【讨论】:

    • 听起来不错,经过测试并正常工作。谢谢! (将在 20 小时内发送赏金 :))
    【解决方案2】:

    您可以使用 json 文件来存储您的资产或源文件位置并将其加载到您的 gulp 文件中。

    例如:

    // config.json
    
    {
      "scripts": ["awful.js", "lot.js", "of.js", "js.js", "files.js"]
    }
    

    在你的 gulp 文件中你会这样做

    // gulpfile.js
    
    var config = require('./config');
    
    var scripts = config.scripts;
    
    console.log(scripts);
    

    【讨论】:

    • 问题是文件会比这更复杂,更像是object,比如:var scripts = { main: [ 'some-script ], notmain: ['etc'] }。不过我会试一试,看看效果如何。谢谢!
    • JSON 派生自 JavaScript,因此您应该能够构建非常复杂的结构,可以将其解析为适合您需求的对象。只要你使用有效的 json 语法。
    • 嗯,是的,但是我会在该文件上采用更“动态”的方法,这就是为什么我要求提供.js 文件的原因;就像可能通过for loop 并“动态”构建最终输出 - 不确定这是一个词和/或正确的词:D
    • 你的方法没问题,有没有办法用.js 文件做到这一点?像在您的示例中一样访问输出?
    • 我相信您可以使用自己的模块并将其导入您的 gulpfile。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 2013-12-09
    • 2023-04-07
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多