使用nodeJS实现前端项目自动化之项目构建和文件合并

Posted 小火柴的蓝色理想

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用nodeJS实现前端项目自动化之项目构建和文件合并相关的知识,希望对你有一定的参考价值。

前面的话

  一般地,我们使用构建工具来完成项目的自动化操作。本文主要介绍如何使用nodeJS来实现简单的项目结构构建和文件合并

 

项目构建

  假设,最终实现的项目名称为\'test\',结构如下图所示

  那么,首先需要先设置一个JSON对象来保存要创建的目录结构

var projectData = {
    \'name\' : \'test\',
    \'fileData\' : [
        {
            \'name\' : \'css\',
            \'type\' : \'dir\'
        },
        {
            \'name\' : \'js\',
            \'type\' : \'dir\'
        },
        {
            \'name\' : \'images\',
            \'type\' : \'dir\'
        },
        {
            \'name\' : \'index.html\',
            \'type\' : \'file\',
            \'content\' : \'<html>\\n\\t<head>\\n\\t\\t<title>title</title>\\n\\t</head>\\n\\t<body>\\n\\t\\t<h1>Hello</h1>\\n\\t</body>\\n</html>\',
        }
    ]
};

  目录结构的创建逻辑如下

var fs = require(\'fs\');
if ( projectData.name ) {
    fs.mkdirSync(projectData.name);
    var fileData = projectData.fileData;
    if ( fileData && fileData.forEach ) {
        fileData.forEach(function(f) {
            f.path = projectData.name + \'/\' + f.name;
            f.content = f.content || \'\';
            switch (f.type) {
                case \'dir\':
                    fs.mkdirSync(f.path);
                    break;
                case \'file\':
                    fs.writeFileSync(f.path, f.content);
                    break;
                default :
                    break;
            }
        });
    }
}

 

文件合并

  假设,目标是合并\'test\'目录下的所有js文件。\'test\'目录结构如下所示,包含1.js,以及js文件夹内的2.js

1.js
js
    2.js

  其中,1.js与2.js的内容如下

//1.js
console.log(1);
//2.js
console.log(2);

  在合并这两个文件之前,首先需要实现一个目录遍历函数来遍历\'test\'目录,根据nodejs之文件操作博客中的目录遍历章节,可得到如下代码

function travel(dir, callback) {
    fs.readdirSync(dir).forEach(function (file) {
        var pathname = path.join(dir, file);

        if (fs.statSync(pathname).isDirectory()) {
            travel(pathname, callback);
        } else {
            callback(pathname);
        }
    });
}

  文件合并的逻辑如下

var fs = require(\'fs\');
var path = require(\'path\');var path = require(\'path\');
var filedir = \'./test\';

fs.watch(filedir, function(ev, file) {
    //用于存放所有的js文件
    var arr = [];
    //将每一个js文件的路径存到arr数组中
    function travel(dir) {
        fs.readdirSync(dir).forEach(function (file) {
            var pathname = path.join(dir, file);       
            if (fs.statSync(pathname).isDirectory()) {
                travel(pathname);
            } else {
                arr.push(pathname);
            }
        });
    }      
    //只要有一个文件发生了变化,我们就需要对这个文件夹下的所有文件进行读取,然后合并
    travel(filedir);
    //读取数组arr中的文件内容,并合并
    function concat(arr){
        var content = \'\';
        arr.forEach(function(item) {
            var c = fs.readFileSync(item);
            content += c.toString() + \'\\n\';
        });    
        fs.writeFile(\'./result.js\', content);
    }
    concat(arr);
});

  这样,当1.js文件内容发生改变时,合并后的结果文件result.js会立刻生效,并重新合并为最新内容

 

以上是关于使用nodeJS实现前端项目自动化之项目构建和文件合并的主要内容,如果未能解决你的问题,请参考以下文章

在Maven中前端构建实践

前端开发中运用哪些nodejs

nodeJS(前后端分离、优势、不足

使用gulp构建一个项目

前端自动化构建工具之webpack

构建工具gulp之入门指南