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));
相关推荐
0226NodeJS文件合并packagejson配置Demo
nodejs 解析html根据标签提取需要合并的js、css,并且更新html # 简介 > 站点页面上js、css外链过多会导致网页的加载速度过慢,通过合并页面的js、css成一个文件,减少http的开销。 读取config.json,解析html根据 ...
组合 JSON 转 CSV 将所有 JSON 文件合并到一个文件夹中并将其保存为 CSV 的 NodeJS 脚本
基于nodejs的excel表格合并工具 安装或升级 该工具是Nodejs命令行工具,安装方式如下(需全局安装) ...输入命令,选择需要合并Excel的文件夹(文件夹里面不能包含其他的任何文件) excelmergetool
使用nodejs将mysql数据库中的数据导出成excel格式,并附带mysql连接池及mysql模块的封装,以及三百万的mysql测试数据,内容详细。
这是一个node命令,有两个命令可用,一是用于生成补丁文件,一个是合并补丁生成新的文件.
因此,如果您的项目文件夹中有许多“主文件”,并且它们有很多常见的依赖项,那么如果您必须为您的同事提供主要需要的最少文件集,这可以节省您的费用。 如果你喜欢这个项目,并且你也希望我在未来分享发展。 请花 ...
提供 helper nodeJS 模块来按顺序合并多个 yaml 文件。 获取 YAML 文件的文件路径数组,并使用 lodash 将后面文件的属性到前面的文件中,返回合并的对象。 安装 npm install git://github....
node-diff3是一个Javascript库,用于查找两个缓冲区之间的差异,生成和应用补丁以及在原始缓冲区和两个更改的缓冲区之间执行3路合并。 它包含与工具类似的功能。 该代码最初来自Tony Garnock-Jones创建的...
自动执行:minifier和合并操作,生成一个移去“.minifier”后缀的文件。 例如:配置“extend_edit.min.js.minifier”内容: extend_cal.js extend_caltree.js extend_ref.js extend_search.js extend_tuple.js ...
该存储库仅处理传感器应用程序,但该应用程序可以扩展并与作者的其他 IoT 应用程序合并,例如 IoT Streamer 应用程序、IoT Configuration 应用程序等。 物联网传感器应用程序分为以下几个功能: 传感器数据采集:...
适用于NodeJS的蜂窝直线 该软件包使您可以轻松地对Express / NodeJS... 我们使用--no-git-tag-version来避免自动标记-使用版本标记会自动触发发布的CI运行,而我们只想在将PR合并到main 。 完成此操作后,请按照我
现在UglifyJS的最新版本为 2.8.13,主要功能为JS的压缩和合并,下面直接进入教程: 安装: <span xss=removed>npm install uglify-js -g 将uglifyjs安装为全局变量,方便我们在任何地方使用。 下面是shell命令的...
前言 Nodejs最大的亮点就在于事件驱动, 非阻塞I/O 模型,这使得Nodejs具有很强的并发处理能力,...那,我们读取两个文件,将这两个文件的内容合并到一起处理怎么办呢?大多数接触js不久的人可能会这么干: 代码如下:
一个小型应用程序,可以将多个pdf文件合并为一个。 这是一个小型开源项目,您可以在其中合并PDF文件。 为什么我开始这个项目 在大多数情况下,合并PDF时,我会使用在线工具来完成此操作。 但是,当我需要将一些重要...
nodejs项目 我的nodejs项目信用分支执照麻省理工学院执照版权所有(c)2021 ccdd13 特此免费授予获得此软件和相关文档文件(“软件”)副本的任何人无限制地处理软件的权利,包括但不限于使用,复制,修改,合并的...
nodejs-mail-to-pdf 将所有附件将电子邮件EML转换为PDF。 该库使用来解析电子邮件,并使用来将HTML转换为PDF,将图像转换为PDF以及将MS Office转换为PDF。安装 npm i跑步 npm start这个怎么运作此样本中包含三封测试...
古腾堡此 bash 脚本用于发布 Nodejs 项目/模块。 它遵循 git-flow 的最佳实践。什么? 它获取项目(通过您指定的路径)并创建发布分支。 之后它会删除 node_modules/ 文件夹并执行全新的 npm 安装。 如果完成,它会...
chapterrific —使用FFmpeg,GPAC和AtomicParsley的工具组合,将MP4文件合并为一个文件(带有章标记)。 episodium —重命名MP4文件并使用AtomicParsley添加元数据。 mixtapes —使用FFmpeg,GPAC和AtomicParsley...