从外部文档列表中Grunt Uglify文件

问题描述

我有一个模块系统,可以通过管理UI进行控制,开发人员可以启用或禁用功能,然后任务运行器负责将所有UI资产准备为单个文件以加载到前端。

使用SASS,我可以以编程方式控制index.scss文件的编译,这意味着这很简单-但是,对于JS,我找不到相同的选项。

该想法是避免任何文件重复,操纵或移动,以减少复杂性,避免出现问题,并加快任务运行程序的速度,使任务运行程序迅速膨胀并减慢速度。

随着该过程从保存例程开始,我可以收集有关当前“活动”模块的数据,并将其存储为任何文件格式-json,csv等(然后),然后从文件中加载该配置。 Gruntfile-可能一直在监视(如果config只能被加载一次的问题呢?-需要在每次编译之前重新抓取数据)。

简单的例子:

* module.json

{"js":["modal.js","toast.js","tab.js","collapse.js","form.js","toggle.js","gallery.js","helper.js","scrollspy.js","scroll.js","lazy.js","javascript.js","comment.js","push.js","nprogress.js","consent.js","search.js","anspress.js","localize.js"]}

* Gruntfile.js

// ------- configuration ------- ##
module.exports = function(grunt) {

    grunt.initConfig({

        // load modules ##
        modules: grunt.file.readJSON('module.json'),'uglify': {
            // options etc ##
            files:{
                'library/asset/js/module.min.js' : '<%= modules.js %>'
            } 
         }

    });

    // Development Tasks ##
    grunt.registerTask( 
        'default',[ 'uglify' ]
    );
}

此配置可以运行,但不能正确地从JSON加载数据-Grunt说:

未编写目标库/asset/js/module.min.js,因为src 文件为空。

我知道Grunt可以阅读JS,因为我可以执行以下操作:

*终端

$ grunt config
Running "config" task
["modal.js","localize.js"]
Done.

* Gruntfile.js

// load config ##
grunt.registerTask( 
    'config',function() {
        modules = grunt.file.readJSON('module.json')
        grunt.log.write(JSON.stringify( modules.js ) );
    }
);

对指针有什么想法吗?谢谢!

解决方法

答案非常简单-在JSON中包含每个“文件”的完整路径,然后Grunt对其进行了解析,没有问题。