php合并js,js怎么实现项目构建和文件合并?

前面的话

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

项目构建

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

9c32d048c6d9d13874146b07752a01de.png

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

var projectData = {'name' : 'test','fileData' : [

{'name' : 'css','type' : 'dir'},

{'name' : 'js','type' : 'dir'},

{'name' : 'images','type' : 'dir'},

{'name' : 'index.html','type' : 'file','content' : '\n\t

\n\t\ttitle\n\t\n\t\n\t\t

Hello

\n\t\n',

}

]

};

目录结构的创建逻辑如下

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;

}

});

}

}

36ac62190bc3b62b7347a8e5805e7e74.png

文件合并

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

1.js

js2.js

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

//1.jsconsole.log(1);//2.jsconsole.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会立刻生效,并重新合并为最新内容

568f58f2fef508a49d6c7dd87050a7f7.gif

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值