var fs = require("fs"), path = require("path"), http = require("http"); var MIME = { '.css':'text/css', '.js':'application/javascript' } /** *合并文件 * @param {Object} pathnames * @param {Object} callback */ function combinFiles(pathnames,callback){ var output = []; (function next(i,len){ if(i<len){ fs.readFile(pathnames[i],function (err,data){ if(err){ callback(err) }else{ output.push(data); next(i+1,len) } }); }else{ callback(null,Buffer.concat(output)); } }(0,pathnames.length)); } /** *主函数 * @param {Object} argv */ function main(argv){ //var config = require('./config.json'), var config = JSON.parse(fs.readFileSync(argv[0],'utf-8')), root = config.root || '.', port = config.port || 8080; http.createServer(function (req,resp){ var urlInfo = parseURL(root,req.url); combinFiles(urlInfo.pathnames,function (err,data){ if(err){ resp.writeHead(404); resp.end(err.message); }else{ resp.writeHead(200,{ "Content-Type":urlInfo.mine }); resp.end(data); } }); }).listen(port); } /** *解析url地址 */ function parseURL(root,url){ var base,pathnames,parts; if(url.indexOf("??") === -1){ url = url.replace("/","/??"); } parts = url.split("??"); base = parts[0]; pathnames = parts[1].split(",").map(function(value){ return path.join(root,base,value); }); return { mime:MIME[path.extname(pathnames[0])] || 'text/plan', pathnames:pathnames } } main(process.argv.slice(2));
config.json
{“port”:“8080”}
启动服务
node server.js config.json
浏览器测试
http://localhost:8080/??server.js,temp.js
优化版的server.js
var fs = require("fs"), path = require("path"), http = require("http"); var MIME = { '.css': 'text/css', '.js': 'application/javascript' } /** *合并文件 * @param {Object} pathnames * @param {Object} callback */ function combinFiles(pathnames, callback) { var output = []; (function next(i, len) { if (i < len) { fs.readFile(pathnames[i], function(err, data) { if (err) { callback(err) } else { output.push(data); next(i + 1, len) } }); } else { callback(null, Buffer.concat(output)); } } (0, pathnames.length)); } /** *主函数 * @param {Object} argv */ function main(argv) { var config = JSON.parse(fs.readFileSync(argv[0], 'utf-8')), root = config.root || '.', port = config.port || 8080; http.createServer(function(req, resp) { var urlInfo = parseURL(root, req.url); validateFiles(urlInfo.pathnames, function(err, pathnames) { if (err) { resp.writeHead(404); resp.end(err.message); } else { resp.writeHead(200, { "Content-Type": urlInfo.mime }); outputFiles(pathnames, resp); } }); }).listen(port); } /** *输出文件 */ function outputFiles(pathnames, writer) { (function next(i, len) { if (i < len) { var reader = fs.createReadStream(pathnames[i]); reader.pipe(writer, { end: false }); reader.on("end", function() { next(i + 1, len); }) } else { writer.end(); } }) (0, pathnames.length); } /** * 验证文件 */ function validateFiles(pathnames, callback) { (function next(i, len) { if (i < len) { fs.stat(pathnames[i], function(err, stats) { if (err) { callback(err); } else if (!stats.isFile()) { callback(new Error()); } else { next(i + 1, len); } }) } else { callback(null, pathnames); } })(0, pathnames.length); } /** *解析url地址 */ function parseURL(root, url) { var base, pathnames, parts; if (url.indexOf("??") === -1) { url = url.replace("/", "/??"); } parts = url.split("??"); base = parts[0]; pathnames = parts[1].split(",").map(function(value) { return path.join(root, base, value); }); return { mime: MIME[path.extname(pathnames[0])] || 'text/plan', pathnames: pathnames } } main(process.argv.slice(2));
相关推荐
本教程将详细讲解如何利用Node.js处理`package.json`文件,进行配置合并以及相关的开发实践。 一、`package.json`文件详解 1. 基本结构:`package.json`文件通常包含`name`、`version`、`description`、`keywords`...
4. **路径管理**:Node.js中的`path`模块提供了处理文件路径的工具函数,例如合并路径、获取文件扩展名等。 5. **HTTP响应**:当用户请求下载文件时,我们需要构造合适的HTTP响应,包含文件内容和适当的头部信息...
nodejs 解析html根据标签提取需要合并的js、css,并且更新html # 简介 > 站点页面上js、css外链过多会导致网页的加载速度过慢,通过合并页面的js、css成一个文件,减少http的开销。 读取config.json,解析html根据 ...
所有分片上传完成后,使用`fs`模块的`concat`函数或者手动合并临时文件。 **4. jQuery大文件分片上传插件** 在描述中提到的"jquery大文件分片上传插件"可能是用于前端实现分片上传的工具,如Resumable.js或...
基于nodejs的excel表格合并工具 安装或升级 该工具是Nodejs命令行工具,安装方式如下(需全局安装) ...输入命令,选择需要合并Excel的文件夹(文件夹里面不能包含其他的任何文件) excelmergetool
本文将详细介绍如何使用 JavaScript 和 Node.js 实现一个功能强大的工具:将多个 JSON 文件合并并转化为 CSV 格式。这个过程通常称为数据的格式转换,对于数据分析、报表生成以及与其他系统集成具有重要意义。 标题...
1. 文件系统(fs):NodeJS内置的fs模块提供了操作文件和目录的API,如读取、写入、创建、删除等。 2. 网络模块(http/https):用于创建HTTP和HTTPS服务器,支持监听客户端请求并发送响应。 3. URL模块:解析和构建...
2. rc模块会按照特定的优先级顺序合并配置,包括: - 命令行参数 - 环境变量(以${appname}_为前缀的变量) - 指定文件 - 默认配置文件(位于多个可能的目录中) - 用户主目录下的配置文件 - 系统级别的配置...
4. 将生成的Excel文件保存到本地文件系统。 5. 可能包含一个`test.sql`文件,用于生成大规模的测试数据。 这个示例对于需要在后端处理大量数据导出的开发者非常有用,它展示了如何利用Node.js高效地处理数据并生成...
"Nodejs WEB 服务器静态文件托管、GET POST 路由 EJS 模板引擎" NodeJs WEB 服务器静态文件托管是指将静态文件托管在 NodeJs 服务器上,使得客户端可以直接访问这些文件。静态文件托管可以提高网站的访问速度和...
标题“CacheCheck: python和nodejs合并的CacheChck”暗示了这是一个结合了Python和Node.js技术的缓存检查工具。缓存检查在软件开发中扮演着至关重要的角色,因为它涉及到性能优化和数据一致性。理解这个工具的运作...
"node命令行生成补丁文件合并补丁生成新的文件"这个主题涉及的是一个基于Node.js的命令行实用程序,它允许开发者创建补丁文件并合并多个补丁以生成更新后的文件。下面我们将深入探讨这一主题。 首先,补丁文件是...
标题中的“nodejs用gulp管理前端文件方法”指的是在Node.js环境下使用Gulp这个自动化构建工具来管理和优化前端开发过程中的文件。Gulp是基于Node.js的自动化任务运行器,它可以帮助开发者自动化处理常见的前端任务,...
Node.js作为一款强大的服务器端JavaScript运行环境,提供了丰富的生态系统,包括用于处理文件操作、压缩和合并等任务的模块。这款基于Node.js的Seajs压缩部署工具正是利用了这些模块,实现了Seajs模块的自动化处理。...
“grunt”则是一个JavaScript任务运行器,它自动化了一系列的前端工作流程,如编译Sass、压缩JavaScript和CSS、合并文件等。在“nodejs-demo”中,Grunt可能被配置来执行这些任务,确保代码的优化和构建过程的高效性...
在实际开发中,你可能还需要处理其他任务,比如 JavaScript 的 Babel 转换、HTML 模板的合并、静态资源的复制、文件的清理等。Gulp 社区提供了许多插件来满足这些需求,你可以根据项目需要进行选择和配置。 总结来...
4. Path模块:处理文件路径相关的操作,如解析、合并路径。 5. Buffer模块:处理二进制数据,是Node.js处理非文本数据的关键。 三、模块系统 Node.js使用模块化开发,每个文件都是一个模块,通过`require`导入模块...
SVGO通过一系列可配置的插件来清理和压缩SVG代码,删除不必要的信息,如注释、元数据、隐藏元素等,同时也可以进行简化路径、合并重复的属性等操作,从而达到减小SVG文件大小的目的。 使用SVGO的步骤通常包括以下几...