Node.js入门笔记(5):案例两则
案例分析:前端自动化
1. 实现一个自动创建前端项目文件的js
通过node.js自动创建前端项目目录,包括js目录,js目录css目录,index.html和对应的内容。
初步的代码如下:
var projectData={
'name':'前端模板',//总文件夹名
'fileData':[{
'name':'style',
'type':'dir'
},{
'name':'script',
'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<h1>hello</h1>\n\t</body>\n\t</html>'
}]
};
var fs=require('fs');
if(projectData.name){
fs.mkdir(projectData.name);
var fileData=projectData.fileData;
if(fileData&&Array.isArray(fileData)===true){//如果该属性对象存在,而且是数组
fileData.forEach(function (f) {//是数组就循环它!
//接下来要做的有:根据f.type判断是创建f.name的文件还是文件夹,如果是index.html就写入它
console.log(f);
if(f.type=='dir'){
fs.mkdir('./'+projectData.name+'/'+f.name, function (mkdirErr) {
if(!mkdirErr){
console.log('成功创建了名字为'+f.name+'的文件夹');
if(f.name!=='images'){//不是图片的话还要创建一个同名文件在该目录下,内容为空
var fileName='';
if(f.name=='style'){
fileName=f.name+'.css';
}else if(f.name=='script'){
fileName=f.name+'.js';
}
fs.writeFile('./'+projectData.name+'/'+f.name+'/'+fileName,'',function () {
console.log('已经尝试创建了名为'+fileName+'的文件');
});
}
}else{
console.log(f.name+'文件夹创建失败!');
}
})
}else{//不是文件夹就创建文件吧
if(f.name=='index.html'){
fs.writeFile('./'+projectData.name+'/'+f.name,f.content,function () {
console.log('已经尝试创建了index文件');
});
}
}
})
}else{
console.log('fileData出错');
}
}
2.实现一个对合并文件夹内容的程序
场景描述:在前端开发中,常常需要对几个文件的代码进行合并。试想,在服务器环境下,有一个source文件夹。内有1.txt和2.txt两个文件甚至更多(n.txt)。同时在source同目录还有一个main.js文件夹。
当我每次修改source文件夹里边的任意一个txt文件时,这段程序可以把文件夹内所有文件的内容读取出来,放到一个content内,在把content的内容写入main.js中。
var fs=require('fs');
var filedir='./source';
fs.watch(filedir,function (ev,file) {//监听文件夹是否改变
//console.log(ev+'/'+file);//不需要判断file是否有内容
//只要有一个文件发生了变化,就需要对这个文件夹下的所有文件进行读取,然后合并
fs.readdir(filedir,function (err,dataList) {
//console.log(dataList);
//第一步,先把每次改变时source文件夹的所有内容读取出来,放到数组arr里
var arr=[];
dataList.forEach(function (f) {
if(f){//如果source文件夹存在文件
//console.log(filedir+'/'+f);
var info=fs.statSync(filedir+'/'+f);//
// console.log(info); if(info.mode=='33206'){//如果是文件,该路径保存到数组
arr.push(filedir+'/'+f)
}
}
});
//console.log(arr);
//console.log('------分界线-------');
//第二部:读取数组文件的内容并合并
var content='';
arr.forEach(function (f) {
var c=fs.readFileSync(f);//获取内容
//console.log(c);
content+='/*来自'+f+'*/'+'\n'+c.toString()+`\n`;
console.log(content);
//接下来就是把数据内容保存到main.js
fs.writeFile('./main.js',content);
});
console.log('-----')
})
});
这段代码就可以在当前文件目录下创建一个main.js,里边包含了输出的内容
main.js的输出效果

挺好,挺好。想新建多少就新建多少
Node.js入门笔记(5):案例两则的更多相关文章
- Node.js入门笔记(1):基本概念
Node.js和JavaScript: 核心都是ECMAScrit,比如数据类型,语法结构,内置对象等等. 但是在js中顶层是window 在node中的不存在这个window(console.log ...
- Node.js入门笔记(6):web开发方法
使用node进行web开发 用户上网流程: 表面上看:打开浏览器--输入网址--跳转--上网. 背后的过程是什么呢? http请求网址到指定的主机--服务器接收请求--服务器响应内容到用户浏览器--浏 ...
- Node.js入门笔记
第一步自然是安装了.我是用Webstorm这个ide,安装分2步: 1.安装nodejs,下载Windows下的安装版本号.注意是以msi为扩展名的,然后下一步.没啥好说的,下载地址例如以下: 32位 ...
- Node.js入门笔记(4):文件系统(fs)
文件系统(FileSystem) 文件系统模块 对于文件无外乎创建修改添加. File System - 文件系统模块 - require('fs') fs模块是核心模块,需要使用require导入后 ...
- Node.js入门笔记(3):全局对象(2)
buffer 用于更好操作二进制数据,他是一个全局变量.类似数组. var a=new Buffer(); buffer类的三种实现 第一种创建方式 new Buffer(size);size[Num ...
- Node.js入门笔记(2):全局对象(1)
以下将以API文档为基础进行分析学习 global对象 这些对象在所有模块里都可用.有些对象不是在全局作用域而是在模块作用域里,这些情况下面文档都会标注出来. __filename--返回当前模块文件 ...
- Node.js 入门资料
小毛驴的阿凡提的 Node.js 入门笔记 http://www.cnblogs.com/Afanty/category/1007304.html
- 《Node.js入门》CentOS 6.5下Node.js Web开发环境搭建笔记
近期想尝试一下英特尔的基于WebRTC协同通信开发套件,所以须要在本地搭建Node.js Web的开发測试环境. 这里讲的是CentOS 下的搭建方法.使用Windows的小伙伴请參考: <No ...
- React.js入门笔记
# React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的 ...
随机推荐
- List tuple 类型转成数组
SKlearning大部分的输入数据都是M * N数组. 然而我们从数据库或文件读取得来的通常是Python内定的类型tuple或list 它们的优势就不说了,但是直接把list或tuple构成的二维 ...
- [Java入门笔记] Java语言基础(三):运算符
简介 运算符是一种特殊的符号,运算符是通过一定的运算规则操作一个或多个操作数,并生成结果的特定符号,运算符和操作数的有效组合称为表达式. Java中运算符主要分为以下几类: 赋值运算符 算术运算符 关 ...
- mysql 安装问题
针对免安装版的mysql: 1.启动CMD,在mysql安装目录下 ~\bin\目录下,输入: mysqld -install 安装msyql服务: 2.启动MySQL服务,输入: net st ...
- 在Dell R720服务器上安装ESXI5.5时会出现卡在LSI_MR3.V00的解决方法
接近年底,公司各种活动,各种加班,导致没有太多时间写博客,今抽了点时间将前几天搭建虚拟化服务时所出现的一个问题描述下: 服务器配置:CUP E5-2609 内存32G 硬盘5 ...
- 鼠标 mouseover和mouseout事件
在div内想实现鼠标移入移出效果,最开始的时候是用了jquery的mouseout和mouseover事件来实现的, $('.product).mouseover(function(){ …… }). ...
- 【2016-11-11】【坚持学习】【Day24】【WPF 自定义控件 附加属性 自定义事件】
UserControl ,自定义控件. 这里刚刚想到一个问题.什么时候应该用usercontrol 定义一个控件.什么时候应该重写控件的template和样式,实现新效果. 引用一下人家的话:http ...
- git stash 用法
git stash用于将当前工作区的修改暂存起来,就像堆栈一样,可以随时将某一次缓存的修改再重新应用到当前工作区. 一旦用好了这个命令,会极大提高工作效率. 直接举例说明: 1.准备工作,首先初始 ...
- Java程序设计之合租房synchronized(二)
一号和二号合租一间房,里面共用一个卫生间对象,这是要用到synchronized关键字,一号与二号同时使用卫生间时,一个需要wait()等待被唤醒,另外一个使用完之后卫生间对象被释放,这时候刚刚使用的 ...
- 《JavaScript高级程序设计》笔记整理
欢迎各位指导与讨论 : ) -------------------------待续------------------------------- 本文为笔者在学习时整理的笔记,如有错漏,恳请各位指出, ...
- 关于SIGSEGV错误及处理方法(转)
转自:http://blog.csdn.net/brace/article/details/1102422 今天编程遇到了SIGSEGV错误,比较困惑,所以找了些资料,总结一下: (1)官方说法是 ...