设为首页 收藏本站
查看: 973|回复: 0

[经验分享] 《nodejs+gulp+webpack基础实战篇》课程笔记(一)--开开脑,走走简单的基础

[复制链接]

尚未签到

发表于 2017-2-24 11:05:04 | 显示全部楼层 |阅读模式
  本课程的前期在windows下学习,开发工具使用是webstorm。
  首先请到nodejs.org下载LTS版本NODEJS.具体安装请自行google,baidu或则bing.
  创建第一个文件:在项目目录下创建一个JS文件,例如test.js.



console.log('this is test');  //test.js
  运行:
DSC0000.png

  现在,我们学习一个函数,require(“脚本的文件名”)。
    我们新建一个项目目录mynode,以后我们本课程的目录文件都会放在这个文件文件夹中。在项目目录中新建一个slib.js文件,随便写一个函数



exports.showName = function(){   
console.log('xiaozu');
}//导出一个函数
   然后我们再新建一个叫xiaozu.js的文件:



var getlib = require("./slib.js");  //
getlib.showName();
  在终端执行node
DSC0001.png


  了解和使用NPM:
    随同NODEJS一起安装的包管理工具。没有它则等于一切都没有。它的官方包镜像网站是https://www.npmjs.com/。例如我们使用npm下载安装最新的jquery:
   DSC0002.png
  我们来到我们的编辑工具,看看项目目录中发生了什么变化:
DSC0003.png

  对,文件中新生成了一个node_moudules文件夹,在该文件中,有一个jquery文件夹。好了,这个地方就到此结束,这里只是演示下如何用npm下载一个jquery,(事实上大家不要去研究这个jquery 怎么在nodejs用)。
  然而我们现在需要了解下nodejs如何加载自定义模块,我们用下面这个小例子还进行测试。
  首先,我们还在在目录文件中的node_modules下创建一个slib文件夹,将刚才的lib.js移动进这个文件夹里,并把这个文件更名为index.js(这个其实老师有一个讲解过程,这里省略,我们只需要知道这里加载自定义模块,需要把这个文件命名为index.js就OK)。
   DSC0004.png
  我们在xiaozu.js中引用这个文件:



var getlib = require('slib');
getlib.showName();
  nodejs会自动去寻找slib文件夹,并查看文件下下面有无index.js这个文件。我们在控制台中运行node看看结果:
     DSC0005.png


  package.json
  到目前这个阶段,你只要认为它是一个NODEJS和NPM都会自动读取的配置文件,就可以了。

 在slib文件夹中,我们手动建立一个package.json文件,它里面是个标准的JSON格式字符串


{
“main”:”aaa.js”   //这代表入口
}



粗糙的玩一玩javascript的"编译"
  接下来在项目文件中新建一个index.html,然后引用上面的xiaozu.js



<script src="xiaozu.js"></script>
  然后打开index.html,F12查看,遗憾的发现,报错了!
     DSC0006.png
  因为网页中,还不支持require(不代表未来不支持),此时会报 “require没有定义”这个错误。既然node能运行shenyi.js,那么我们是否通过 nodejs把require出来的东西给生成一个啥文件呢?
    现在来看看能不能把xiaozu.js里到的值打印出来?



var getlib = require('slib');
getlib.showName();
for(var xxoo in getlib){
console.log(getlib[xxoo]);
}

  好了,到这一步,我们需要先认识下NODEJS的fs模块。这是专门用来处理文件的内置模块。



var file = require('fs');
file.readFile         //读文件
file.writeFile        //写文件
file.appendFile    //追加文件
  我们要干的其实是appendFile。



appendFile( filename, data,  [options], callback );
//file.appendFile(“build.js”,”自己拼凑些内容”) ,其他回调啥的一律不写,如果特别有兴趣研究这个,请百度或看手册。我们暂时不用去纠结这些.
  我们在xiaozu.js文件中这样写:



var getlib = require('slib');
//把生成的内容读取出来,生成一个新的文件。
var file = require('fs');
file.writeFile("build.js","");
function genCode(key,value){
return 'var '+key+'='+value+';\n';
}
for(var xxoo in getlib){
file.appendFile("build.js",genCode(xxoo,getlib[xxoo]));
//console.log(getlib[xxoo]);
}
file.appendFile("build.js","showName();\n");
  在node中运行这个xiaozu.js,我们看看我们的项目目录


  这里自动生成了一个build.js文件,我们在方才新建的index.html文件引入



<script src="build.js"></script>
  我们再打开chorme,按下F12:
    


css也能"编译"?图片也能“编译”?
  当然目前我们的做法完全是为了后面的学习打基础、开脑。请大家不要过于执着。
  新建一个test.css,写上{}来研究下如果是CSS文件咱该如何办?

 简单点就一句:*{color:blue;},然后我们在xiaozu.js文件中加入


file.readFile("./test.css",function(err,data){
if(err){
//代表出错,简单起见,这课俺们啥都不写
}else{
file.appendFile("build.js","document.write('<style>"+data+"</style>')");
}
});
  同样,node中运行xiaozu.js。看看build.js生成了啥

   最后我们打开index.html看看效果,当然你要写点东西才能看出来,我们并没有引入.css文件,但是样式还是得到了应用。
  OK,现在我们给CSS中引入一张图片,*{color:blue;background:url("./m.jpg");}
  我们先用简单的几个步骤演示下,这个思路。



//我们在xiaozu.js中新增红色代码部分
var getlib = require('slib');
//把生成的内容读取出来,生成一个新的文件。
var file = require('fs');
file.writeFile("build.js","");
function genCode(key,value){
return 'var '+key+'='+value+';\n';
}
file.readFile("./test.css",function(err,data){
if(err){
//代表出错,简单起见,这课俺们啥都不写
}else{
/*利用NODEJS读取出css 后,用正则读取图片路径
为了演示方便,我们就读取后缀为jpg的内容。*/
var pattern=/['|"](.*\.jpg)['|"]/g;
var res;
while(res=pattern.exec(data.toString()))
//这段并不完善的正则就可以匹配出一般格式的图片内容(jpg).且返回的是一个数组
{
var getImg = file.readFileSync(res[1]); //获取图片的路径和值
//奇幻图片成base64格式
data = data.toString().replace(res[1],"data:image/jpg;base64,"+getImg.toString("base64").trim());
file.appendFile("build.js","document.write('<style>"+data+"</style>')");
}

}
});
for(var xxoo in getlib){
file.appendFile("build.js",genCode(xxoo,getlib[xxoo]));
//console.log(getlib[xxoo]);
}
file.appendFile("build.js","showName();\n");
  来看看生成的build文件中,我们的图片文件是什么样:

   这里是思路:首先我们把图片读取出来,然后非常方便的利用 toString(‘base64’)就可以把图片变成base64编码.  background:url(“./m.jpg”); 如果使用base64显示(格式如下) background:url(“data:image/jpg;base64,xxxoo”)
    这样做的好处和注意点:1、减少服务器的请求。2、写入CSS后,可以压缩(gzip、各种方法)。3、如果是频繁需要更新的图片不建议这么做。4、IE6、7是不支持的(我们也可以无视)。
  下一节课,我们将快速的学习使用gulp.
  
  版权声明:笔记整理者亡命小卒热爱自由,崇尚分享。但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的《前端开发速学成财(nodejs+gulp+webpack基础实战篇)》。本学习笔记小卒于博客园首发, 如需转载请尊重老师劳动,保留沈逸老师署名以及课程来源地址   
  下一课:《nodejs+gulp+webpack基础实战篇》课程笔记(二)--gulp速度上手

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-346566-1-1.html 上篇帖子: 在NodeJS中使用formidable & multiparty实现文件上传 下篇帖子: MAC OS上安装nodejs开发环境
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表