A. Web前端工程师该如何选择web前端模板引擎
今天小编要跟大家分享的文章是关于Web前端工程师该如何选择web前端模板引擎?如果你正在从事web前端工作,如果你也想要了解如何选择web前端模板引擎的知识,那么就来和小编一起看一看本文为大家介绍的内容吧~
一、Web模板就在那里
模板引擎负责组装数据,以另外一种形式或外观展现数据。浏览器中的页面是Web模板引擎最终的展现。
无论你是否直接使用模板引擎,Web模板一直都在,不在前端就在后端,它的出现甚至可以追溯到超文本标记语言HTML标准正式确立之前。
二、服务端的模板引擎
我所知道最早的Web模板引擎是PHP,它正式诞生于1997年,工作在服务器端。让我们看看PHP官方的intro-whatis:
PHP(“PHP:Hypertext
Preprocessor”,超文本预处理器的缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到HTML中,尤其适合web开发。
PHPer普遍赞同PHP本身就是最天然、原生的PHP模板引擎,因为她本来就是。在PHP的世界里多次出现过再包装的模板引擎,着名的有
smarty。
其它服务器端语言很多都有HTML模板引擎,比如JSP、mustache。
毫无疑问,这些服务器端模板引擎最终生成的结果是HTML(XML)字符串,处理流程逻辑使用宿主语言本身的语法实现。
它们的共同特征:HTML只是个字符串,最终结果可能还需要类似Tidy这样的清洁或修正验证工具。
这里提出一个问题:二次封装的smarty有存在的必要么?
三、浏览器端的模板引擎
我所知道最早的前端模板引擎是jCT,它托管于Google
Code,诞生于2008年,宿主语言是JavaScript,工作在浏览器中。很荣幸,我就是jCT的作者,相关早期博客可以查看achun、githubjCT
备份。
直到今天写这篇文章,我才发现pure-js这篇文章里面也提到不少先行者——jemplate最早在2006年就创建了。
今天在OSC搜索JavaScript模板引擎你会得到100+个结果,下边列举一些:
·轻量度:tpl.js、T.js
·认知度:arttemplate、mustache.js、doT.js、handlebars.js、pug
·DOM-tree-based:domTemplate、transparency、plates
·VDOM-based:htmltemplate-vdom、virtual-stache、html-patcher
·流行框架:Vue.js、ReactJS、riot
·Real-DOM:PowJS
它们的共同特征:全都支持插值。
这里还有templating-engines受欢迎度的对比,甚至best-javascript-templating-engines
投票及正反方的理由。
四、如何选择
我认为存在即合理,每个引擎、框架总有可取之处,至少在你的应用里,在某个时代,所以本文不会评论某个引擎哪一点不好,那样是不客观的。现在回答前边提到的问题:smarty
有存在的必要么?我的答案是:有。理由很简单,看给谁用、看大背景。
对于前后端没有分离的应用,或前端人员对后端语言不够熟悉,或因岗位职责需要,那么前端人员掌握一种比较通用的模板语法(语言)是现实的,反之让PHPer自己去使用
smarty那就太浪费技能了。
下面是通常意义上的引擎选择建议:
1.前提,选择的引擎能满足数据渲染需求,且不和现有依赖冲突,如果你已经非常熟悉某个引擎,那你已经有答案了。
2.是一次性的项目需求么?是的话直接选择轻量的,学习复杂度最低的。
3.是要做组件开发么?
4.引擎支持预编译结果,不必每次都实时编译么?
5.要跨平台么?有官方提供支持的,首选类React-JSX的引擎或纯粹的VDOM引擎。
6.选择学习或维护复杂度最低的,众所周知,开发者对调试的时间超过写代码的时间深恶痛绝。
7.最后才是性能对比,性能对比是一件非常细致的工作,他人的对比结果不一定符合你的场景。
我认为应该弱化语法风格的对比,偏好是没有可比性的,一些语法甚至有特殊的背景原因。
为什么最后才是性能对比?
性能的确很重要,但如果性能还没有影响到你的应用体验度,那就忽视它。很难真实地模拟应用场景,通常只有通过真实场景来检验,目前的测试工具还达不到这种效果。
前述问题有些有固定答案,下面讨论余下的问题:如何考虑组件开发、支持预编译、复杂度?
五、组件开发
进行组件开发已经不再是选择模板引擎的问题了,这是生态环境选择的问题。如果你的应用需要更快地完成,那么时间点是第一位的,就选择流行框架,有足够多的组件让你使用或参考。如果你的应用有独立的生态环境,需要技术选型以便长期维护,那继续看下文。
六、预编译
预编译应该具备:
1.编译结果在目标环境中不再需要编译过程。
2.编译结果可调试性,这意味着结果应该包含原生ECMAScript代码,而不是纯粹的数据描述。
大家都知道React-JSX是支持预编译的,官方的说法是ReactWithoutJSX,即总是build过的。
一些基于字符串处理的引擎也支持预编译。如果你需要预编译,建议抛弃编译结果依然是基于字符串拼接的引擎,那样还不如不预编译,那是HTML5未被广泛支持之前的技术手段。
至少也要有类似React-JSX这样的编译结果才具有可调试性。备注:Vue.js支持多种模板引擎,可达到同样的效果。
原ReactJS代码,其中用到了WebComponents技术:classHelloMessageextendsReact.Component{
render(){
return
B. 学哪几种语言最实用 学哪种语言就业前景好
什么是Go?
Go语言是谷歌2009发布的第二款开源编程语言。
Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。不仅可以开发web,可以开发底层,目前知乎就是用golang开发。区块链首选语言就是go,以太坊,超级账本都是基于go语言,还有go语言版本的btcd.
Go的目标是希望提升现有编程语言对程序库等依赖性(dependency)的管理,这些软件元素会被应用程序反复调用。由于存在并行编程模式,因此这一语言也被设计用来解决多处理器的任务。
Google对Go寄予厚望。其设计是让软件充分发挥多核心处理器同步多工的优点,并可解决面向对象程序设计的麻烦。它具有现代的程序语言特色,如垃圾回收,帮助程序设计师处理琐碎但重要的内存管理问题。Go的速度也非常快,几乎和C或C++程序一样快,且能够快速制作程序。
Go的网站就是用Go所建立,但Google有更大的野心。该软件是专为构建服务器软件所设计(如Google的Gmail)。Google认为Go还可应用到其他领域,包括在浏览器内执行软件,取代JavaScript的角色。
为什么要学习GO语言,GO的优势是什么?
1、 Go有什么优势
Go的优势
1:性能
2:语言性能很重要
3:开发者效率&不要过于创新
4:并发性&通道
5:快速的编译时间
6:打造团队的能力
7:强大的生态系统
8:GOFMT,强制代码格式
9:gRPC 和 Protocol Buffers
可直接编译成机器码,不依赖其他库,glibc的版本有一定要求,部署就是扔一个文件上去就完成了。
静态类型语言,但是有动态语言的感觉,静态类型的语言就是可以在编译的时候检查出来隐藏的大多数问题,动态语言的感觉就是有很多的包可以使用,写起来的效率很高。
语言层面支持并发,这个就是Go最大的特色,天生的支持并发,我曾经说过一句话,天生的基因和整容是有区别的,大家一样美丽,但是你喜欢整容的还是天生基因的美丽呢?Go就是基因里面支持的并发,可以充分的利用多核,很容易的使用并发。
内置runtime,支持垃圾回收,这属于动态语言的特性之一吧,虽然目前来说GC不算完美,但是足以应付我们所能遇到的大多数情况,特别是Go1.1之后的GC。
简单易学,Go语言的作者都有C的基因,那么Go自然而然就有了C的基因,那么Go关键字是25个,但是表达能力很强大,几乎支持大多数你在其他语言见过的特性:继承、重载、对象等。
丰富的标准库,Go目前已经内置了大量的库,特别是网络库非常强大,我最爱的也是这部分。
内置强大的工具,Go语言里面内置了很多工具链,最好的应该是gofmt工具,自动化格式化代码,能够让团队review变得如此的简单,代码格式一模一样,想不一样都很困难。
跨平台编译,如果你写的Go代码不包含cgo,那么就可以做到window系统编译linux的应用,如何做到的呢?Go引用了plan9的代码,这就是不依赖系统的信息。
内嵌C支持,前面说了作者是C的作者,所以Go里面也可以直接包含c代码,利用现有的丰富的C库。
2、Go适合用来做什么
服务器编程,以前你如果使用C或者C++做的那些事情,用Go来做很合适,例如处理日志、数据打包、虚拟机处理、文件系统等。
分布式系统,数据库代理器等
网络编程,这一块目前应用最广,包括Web应用、API应用、下载应用、
内存数据库,前一段时间google开发的groupcache,couchbase的部分组建
云平台,目前国外很多云平台在采用Go开发,CloudFoundy的部分组建,前VMare的技术总监自己出来搞的apcera云平台。
3、Go成功的项目
nsq:bitly开源的消息队列系统,性能非常高,目前他们每天处理数十亿条的消息
docker:基于lxc的一个虚拟打包工具,能够实现PAAS平台的组建。
packer:用来生成不同平台的镜像文件,例如VM、vbox、AWS等,作者是vagrant的作者
skynet:分布式调度框架
Doozer:分布式同步工具,类似ZooKeeper
Heka:mazila开源的日志处理系统
cbfs:couchbase开源的分布式文件系统
tsuru:开源的PAAS平台,和SAE实现的功能一模一样
groupcache:memcahe作者写的用于Google下载系统的缓存系统
god:类似redis的缓存系统,但是支持分布式和扩展性
gor:网络流量抓包和重放工具
下面列出来了一些使用的用户
GoUsers - go-wiki - A list of organizations that use Go.
4、Go还存在的缺点
以下缺点是我自己在项目开发中遇到的一些问题:
Go的import包不支持版本,有时候升级容易导致项目不可运行,所以需要自己控制相应的版本信息
Go的goroutine一旦启动之后,不同的goroutine之间切换不是受程序控制,runtime调度的时候,需要严谨的逻辑,不然goroutine休眠,过一段时间逻辑结束了,突然冒出来又执行了,会导致逻辑出错等情况。
GC延迟有点大,我开发的日志系统伤过一次,同时并发很大的情况下,处理很大的日志,GC没有那么快,内存回收不给力,后来经过profile程序改进之后得到了改善。
pkg下面的图片处理库很多bug,还是使用成熟产品好,调用这些成熟库imagemagick的接口比较靠谱
最后还是建议大家学习Go,这门语言真的值得大家好好学习,因为它可以做从底层到前端的任何工作。
C. go语言可以做什么
go语言在高性能分布式系统领域有很好的开发效率,可以主要用于服务器端的开发,能够进行处理日志、数据打包、虚拟机处理、文件系统、分布式系统、数据库代理等。
Go(又称Golang)是Google的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与C相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style并发计算。
撰写风格:
在Go中有几项规定,当不匹配以下规定时编译将会产生错误。
每行程序结束后不需要撰写分号(;)。
大括号({)不能够换行放置。
if判断式和for循环不需要以小括号包覆起来。
Go亦有内置gofmt工具,能够自动整理代码多余的空白、变量名称对齐、并将对齐空格转换成Tab。
D. 如何获取微信小程序前端源码
微信小程序都是在本地运行的,所以我们可以在我们的手机内存中找到小程序的源码文件。
如果你的手机已经root了,那么可以直接查找/data/data/com.tencent.mm/MicroMsg/.../appbrand/pkg/路径中有一段...,这里表示不确定具体一个,一般是很长的数字和字母组成的文件 ,可以先将所有的小程序文件夹删除,然后重新进入你想要的小程序,这样就可以确定是哪个文件了,当然,如果没有root可以使用模拟器来拿,建议还是使用模拟器,更方便一些。
拿到了wxpkg文件,但是我们还差一步,需要将这个文件进行反编译得到内部的各个文件才可以。
wxpkg 是经过微信加密的文件,无法直接通过解压来获得,如果开发比较深入的话,可以直接拿到github的star比较多的wxunpkg ,然后安装运行去解压,如果不是很擅长的话,可以直接使用已经做好的傻瓜式的桌面软件,直接进行反编译处理 。
原理介绍:网页链接
软件获取:网页链接
我的建议还是直接去看下github的源码,了解下反编译原理,然后nodejs语言不擅长可以拿其他的语言来尝试处理下,算是学习也可以。
E. npm安装spm出错,请问是什么问题
SPM v.1.1.2 With SeaJS
SPM v1.1.2使用指南
1.SPM用途
SeaJS提供了模块化开发的机制,在代码开发完后,还需要做产品发布相关的一些操作。 这些可以通过SPM来完成,SPM提供了模块安装、压缩、打包部署等功能。
2.SPM安装
1.从nodejs官网下载最新版本的node。 这里以node-0.8.14为例,直接下载windows版本的安装包即可,默认安装到"C:\Program Files\nodejs", 会自动添加到path中,查看一下版本。
C:\Documents and Settings\Administratornode -v
v0.8.14
2.新版的node都带了npm,这里通过npm来安装spm。下面指定安装1.1.2版本,在当前为最新版本。 如果不指定版本号,默认安装最新版本。安装包大小为11.8M,根据网速不同,请耐心等待。
C:\Documents and Settings\Administratornpm install [email protected] -g
npm http GET https://registry.npmjs.org/spm/1.1.2
npm http 200 https://registry.npmjs.org/spm/1.1.2
npm http GET https://registry.npmjs.org/spm/-/spm-1.1.2.tgz
npm http 200 https://registry.npmjs.org/spm/-/spm-1.1.2.tgz
npm http GET https://registry.npmjs.org/spm-env
npm http GET https://registry.npmjs.org/csslint
npm http GET https://registry.npmjs.org/async
...
下载完spm后,会根据压缩包中的package.json自动安装相关的依赖包,最后会显示如下的界面。
C:\Documents and Settings\Administrator\Application Data\npm\spm - C:\Documents and Settings\Administrator\Application
Data\npm\node_moles\spm\bin\spm
[email protected] C:\Documents and Settings\Administrator\Application Data\npm\node_moles\spm
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected] ([email protected])
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected] ([email protected])
├── [email protected] ([email protected], [email protected], [email protected])
├── [email protected] ([email protected])
├── [email protected]
├── [email protected] ([email protected], [email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected], [email protected])
├── [email protected] ([email protected], [email protected], [email protected], [email protected], [email protected])
└── [email protected] ([email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected].
0, [email protected], [email protected], [email protected])
3.安装后检查一下版本
C:\Documents and Settings\Administratorspm -v
v1.1.2
如果这种方式安装比较慢,可以git 源码后安装,详见官方文档。
本次测试使用的是Widnows XP操作系统
以下演示使用的是v1.1.2版本,不同的版本可能存在差异,请自行留意。
3.SPM查找和安装模块
我们先在C盘根目录建立一个assets目录,用于保存前端开发的所有文件。
先使用spm下载开发需要的模块,spm默认的模块服务器为http://moles.spmjs.org/。 也可以自己在内网搭搭设一个模块服务器,这里不详述。
我们可以先使用spm search命令在模块服务器查找可安装的模块的版本。
C:\assetsspm search seajs
C:\assetsspm search jquery
C:\assetsspm search mustache //以mustache为例子
...
versions: //这里列出可用的版本
0.4.0:
- mustache.js
0.5.0:
- mustache.js
root: gallery //显示模块的跟目录
name: mustache
tag:
type:
C:\assetsspm install [email protected] //指定安装seajs版本
C:\assetsspm install gallery.jquery //不指定版本号,默认安装服务器上jquery最新版本
C:\assetsspm install gallery.mustache //不指定版本号,默认安装服务器上mustache最新版
F. CPU标签上的LGA775pkg的什么意思
LGA775PKG 是指CPU元件的封装。“封装”是指电子元件物理外观参数。
CPU上面的编号代表了该CPU的主要性能指标。如产品系列、主频、缓存容量、使用电压、封装方式、产地、生产日期,通过识别CPU编号,你可以初步认定CPU的工作频率、外频、属于何系列的,防止一些非法商家用超频的CPU冒充高频率产品。
PIII Confidential编号格式:xxxEBkkkMMM2.0VS1 abcde abcdefgh-0123
Xxx: :代表CPU工作频率
EB :E=采用0.18微米制造工艺;B=133MHZ FSB前端总线
Kkk :代表二级缓存的容量
MMM:代表CPU的外部频
2.0V :代表核心电压
S1 :代表CPU的架构,S1=Slot 1
Abcde:规格号
abcdefgh-0123 :序列号,其中第一位代表产地.0=Costa Rica(哥斯达黎加),1=Philippines(菲律宾),9=Malaysia(马来西亚),Y=Ireland(爱尔兰))接下来两位是代表第多少周生产。
PIII Coppermine的编号格式:RaaaaaHZmmmkkkEC abcde abcdefgh-0123
R :R=Socket 370架构
Aaaaa :代表采用的核心。80525=Katmai核心,80526=Coppermine核心
HZ :代表CPU的外频
Mmm :代表CPU的工作频率Hz
Kkk :代表CPU二级缓存容量
EC :代表ECC纠错
Abcde:规格号
abcdefgh-0123 :同PIII Confidential
Celeron编号格式:FV524RX mmmkkk ABCDE XXXXX L01234567-1234
FV524RX:保留
Mmm :代表CPU工作频率
Kkk :代表二级缓存的容量
ABCDE :规格号
XXXXX:产地,MALAY=马来西亚,COSTA RICA=哥斯达黎加
L01234567-1234 :其中第一个L代表产地(0=Costa Rica(哥斯达黎加),1和9= Malaysia(马来西亚));接下来的123代表第多少周生产
Celeron II编号的识别方法与PIII Coppermine相同
Intel PII编号格式:W8065xhzmmmkkkEC ABCDE abcdefgh-0123
W :代表出售对象,x=零售商,空项=OEM厂商
8065 :保留
x :代表采用的核心,2=Klamath核心即0.35微米制造工艺,3= Deschutes核心即0.25微米制造工艺
hz :代表采用的外频
mmm:表处理器的工作频率
kkk :代表二级缓存的容量
EC :代表ECC纠错
ABCDE :规格号
abcdefgh-0123 :其中第一位代表产地,0=Costa Rica(哥斯达黎加),1=Philippines(菲律宾),9=Malaysia(马来西亚),Y=Ireland(爱尔兰));接下来的两位代表第多少周生产。
Duron编号格式:
例如PGA封装的Duron编号:AMD-D800AUT1B:
AMD-D:代表AMD DURON毒龙系列
800 :代表CPU的主频
A :代表封装方式(M=卡匣式,A=PGA,其他为TBD)
U :代表工作电压(S=1.5V;U=1.6V;P=1.7V;M=1.75V;N=1.8V)
T :代表工作温度(Q=60C;X=65C;R=70C;Y=75C;T=90C;S=95C)
1 :代表二级缓存容量(1=64KB;2=128KB;3=256KB)
B :代表最大总线频率(A=B=200MHz;C=266MHz)
Athlon编号格式:
例如:AMD-K7 800MPR52B A表示的意义:
AMD-K7:代表AMD Athlon产品系列
800 :代表CPU的主频
M :代表封装方式(M=卡匣式,P=PGA,其他为TBD)
P或T:代表工作电压(一般为1.03-2.05V)
R :代表工作温度 (如果前面一个字母为T,那么R的最大值是70摄氏度)
5 :代表二级缓存容量(5=512KB,1=1MB,2=2MB)
2 :代表缓存分类(1=全速,2=1/2速)
B :代表最大总线频率(B=200MHz)
A :代表保留特性(前面有三个空格,A=0.18微米制造工艺,C=0.25微米制造工艺)。
PGA封装的Athlon编号:直接刻在CPU的内核表面上,例如AMD-A0850APT3B:
AMD-A0:代表AMD Athlon雷鸟产品系列
850 :是CPU的主频
A :代表封装方式(M=卡匣式,A=PGA,其他为TBD)
P :代表工作电压(S=1.5V;U=1.6V;P=1.7V;M=1.75V;N=1.8V)
T :代表工作温度(Q=60C;X=65C;R=70C;Y=75C;T=90C;S=95C)
3 :代表二级缓存容量(2=128KB;3=256KB)
B :代表最大总线频率(A=B=200MHz;C=266MHz)。
AMD K6-2编号格式:
AMD-K6-2/mmm xvC 2.2V CORE / 3.3V I/O A 生产日期 AMD
mmm:代表工作频率
x :代表封装方式,A=321针PGA
v :代表工作电压,F=允许波动范围2.1~2.3V Core和3.135~3.6V I/O
C :代表最高工作温度,R=70度
2.2V CORE :2.2V CORE=标准2.2V核心电压,
3.3V I/O :3.3V I/O=3.3V I/O电压
A :代表修订版
生产日期:其中第三四个数字代表第几周生产,M代表Monday(星期一),PM代表下午。通常说来,时间越往后的产品,bug越少,性能也越好。
例如编号AMD-K6-2 /266 AFR 2.2V CORE / 3.3V I/O A 9903 MPM 1998 AMD 26351 N 则表示为AMD-K6-2CPU,是266的工作频率,321针PGA封装,最高工作温度70度,第二行26351代表使用CXT核心(早期26050使用的是非CXT核心,26351使用CXT核心,AMD K6-2 400MHZ以上的CPU均用了CXT核心[ 允许更高的倍频 ],比早期的k6-2,较容易超频),N代表封装厂编号
G. yeoman简介与基础使用
一、脚手架的概念
脚手架是前端工程化的集成,是前端工程化的发起者,其本质和作用是创建项目基础结构、提供项目规范和约定。
二、通用工具
Yeoman 通用型脚手架工具,容易拓展,比较灵活,可创建属于自己的脚手架。Plop项目开发过程中,创建特定类型的文件。
三、Yeoman 的基础使用
一、脚手架的概念
脚手架是前端工程化的集成,是前端工程化的发起者,其本质和作用是创建项目基础结构、提供项目规范和约定。
二、通用工具
Yeoman 通用型脚手架工具,容易拓展,比较灵活,可创建属于自己的脚手架。Plop项目开发过程中,创建特定类型的文件。
三、Yeoman 的基础使用
四、Yeoman Sub Generator
作用:在某些某些项目配置通用的的一些文件
在当前文件输入命令:yo node:cli // yarn // yarn link // chen-mole --help
五、Yeoman 基本使用步骤
六、创建自定义的generator模块
本质: 自定义的generator本质上就是一个npm 模块
方法:1、yarn init 初始化package.json 文件
2、 yarn add yeoman-generator 引入模块
3、创建文件目录结构 generators/app/index.js 作为入口文件
4、文件内容
5、yarn link 全局
6、新建文件夹,运行命令yo sample
注意事项:当时eoman-generator,为5.多的版本,报错 。requires yeoman-environment at least 3.0.0,current version is 2.10.3,try reinstalling latest version of "of
最好指定yeoman-generator 的版本为 4.0.1 "yeoman-generator": "^4.0.1" 版本号最好为这个
七、利用模版也可以在指定目录创建文件
this.fs.Tpl(tmpl,output,context) 。 接受三个参数
八、接受用户指令,生成相关模版
九、批量生成多个项目文件的方法
创建文件路径的数组,循环依次写入文件
十、发布自定义的generator模块到npm
1、创建本地仓库一系列命令:
(1) 创建gitignore文件 echo node_mole > .gitigonre
(2)git init
(3)git add .
(4)git commit -m 'fistcomit'
(5)git remote add origin 远程仓库地址
(6)git push -u origin master
2、进行打包编译
(1)yarn pubilsh 此时会出现npm用的淘宝镜像的报错,改为制定到官方npm或者yarn 的地址
改为 yarn publish --registry=https://registry.yarnpkg.com。
(2此时可能还会报错 Couldn't publish package: .......invalid for new packages.
红色框为小写,发布所有的npm 包都要求小写,不能有大写,故把项目改为 generator-chen-react-com
(3)可能还会报错 r Couldn't publish package: "https://registry.yarnpkg.com/generator-chen-react-com: Forbidden"
那去你的邮箱,激活npm 发来的邮件吧,点击一下按钮即可。
四、Yeoman Sub Generator
作用:在某些某些项目配置通用的的一些文件
在当前文件输入命令:yo node:cli // yarn // yarn link // chen-mole --help
五、Yeoman 基本使用步骤
六、创建自定义的generator模块
本质: 自定义的generator本质上就是一个npm 模块
方法:1、yarn init 初始化package.json 文件
2、 yarn add yeoman-generator 引入模块
3、创建文件目录结构 generators/app/index.js 作为入口文件
4、文件内容
5、yarn link 全局
6、新建文件夹,运行命令yo sample
注意事项:当时eoman-generator,为5.多的版本,报错 。requires yeoman-environment at least 3.0.0,current version is 2.10.3,try reinstalling latest version of "of
最好指定yeoman-generator 的版本为 4.0.1 "yeoman-generator": "^4.0.1" 版本号最好为这个
七、利用模版也可以在指定目录创建文件
this.fs.Tpl(tmpl,output,context) 。 接受三个参数
八、接受用户指令,生成相关模版
九、批量生成多个项目文件的方法
创建文件路径的数组,循环依次写入文件
十、发布自定义的generator模块到npm
1、创建本地仓库一系列命令:
(1) 创建gitignore文件 echo node_mole > .gitigonre
(2)git init
(3)git add .
(4)git commit -m 'fistcomit'
(5)git remote add origin 远程仓库地址
(6)git push -u origin master
2、进行打包编译
(1)yarn pubilsh 此时会出现npm用的淘宝镜像的报错,改为制定到官方npm或者yarn 的地址
改为 yarn publish --registry=https://registry.yarnpkg.com。
(2此时可能还会报错 Couldn't publish package: .......invalid for new packages.
红色框为小写,发布所有的npm 包都要求小写,不能有大写,故把项目改为 generator-chen-react-com
(3)可能还会报错 r Couldn't publish package: "https://registry.yarnpkg.com/generator-chen-react-com: Forbidden"
那去你的邮箱,激活npm 发来的邮件吧,点击一下按钮即可。
H. mac上安装node.js弹出来的输入框是什么
输入当前用户的密码
一、Mac 安装 nodejs
前言
由于自己的拓展需求,要临时使用到node.js,所以此次本君就在此mark下 Mac 下node.js的安装和简单的检验示例,给各位小主留个标记,提高下以后的效率。本章对于一些小白而言还是具有普及意义的。
step 1:
访问nodejs官网),点击红色选框区域的v6.10.0 LTS版本并下载,详见下图:
双击刚下载的.pkg文件,打开之后按照步骤默认安装就行,安装完成后的截图如下:
安装完成后,需要进一步验证下版本号等信息,在LaunchPad中打开终端,分别输入 :
npm -v
node -v
两个命令,如下图出现版本信息,说明安装成功。新建一个js文件,nodejsTest.js , 输入下面的代码, 并保存
- var http = require("http");
- http.createServer(function(request, response) {
- response.writeHead(200, { "Content-Type" : "text/plain"
- });
- response.write("Welcome to Nodejs");
- response.end();
- }).listen(8000, "127.0.0.1");console.log("Creat server on http://127.0.0.1:8000/");
- /System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc
配置选项内容,保存在默认的User目录
- {
- "cmd": ["/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc", "$file"],
- "selector": "source.js" }
菜单SublimeText->preferences->browser pakager,打开目录
- var temp = {name:'lili',age:28};
- for (var i = 2; i >= 0; i--) {
- debug("Sublime Test3:"+i);
- }
- debug(temp);
- // 输出 // --> Sublime Test3:2 // --> Sublime Test3:1 // --> Sublime Test3:0 // --> [object Object]
- {
- "cmd": ["node", "$file"],
- "selector": "source.js" }
- {
- "cmd": ["/usr/local/bin/node", "$file"],
- "selector": "source.js" }
- var temp = {name:'lili',age:24};
- for (var i = 2; i >= 0; i--) {
- console.log("Sublime Test3:"+i);//在NodeJS下没有debug()函数 }
- console.log(temp);
- // 输出 // Sublime Test3:2 // Sublime Test3:1 // Sublime Test3:0 // { name: 'lili', age: 24 }
官网版本.png
step 2:
安装完成.png
step 3:
终端验证版本号.png
step 4:
打开终端进入 nodejsTest.js 所在目录, 输入 node nodejsTest
终端显示如下:
终端运行.png
打开浏览器,点击或者输入http://127.0.0.1:8000/, 如果无法打开,可以将刚才新建的js文件中的.listen(8000, “127.0.0.1”) 的ip监听改成 .listen(8000),然后点击或者输入http://localhost:8000/
浏览器测试.png
二、#Mac系统下SublimeText运行JavaScript控制台
Sublime Text 2下载地址:(ht.com/)
Sublime Text 2.png
前言
JavaScript控制台的调试和输出在浏览器端的使用算是工作中常用了,作为前端开发主力编辑器Sublime Text本身是不支持JavaScript的输出和运行的。有的时候我们需要看一下输出的效果,不得不借助于F12查看控制台的程序。作为插件系统及其丰富的编辑器,我们可以通过添加Build System的方法来让Sublime Text支持Javascript Console控制台调试。
JSC方式(Mac OS X)
step 1:
Mac内置了一个javascript控制台程序,路径比较深,(可以用命令"open 目录"来打开目录)
打开目录.png
step 2:
启动Sublime Text,Tools > Build System > New Build System,如下图所示:
New Build System.png
step 3:
保存.png
打开目录.png
step 4:
新建一个JS文件测试控制台输出效果,使用快捷键Command + B按钮进行调试,需要注意的是这里使用debug,而不能使用console.log;选择编译系统,菜单Tools > Build System > Automatic或者JSC
截图如下所示:
截图.png
NodeJS方式
step 1:
下载安装NodeJS,安装步骤详见上文所述,检查是否安装了NodeJS,在终端中运行 node -v 命令
step 2:
重复上文中JSC方式的第二步,在Build Sytem添加以下内容:保存为NodeJS.sublime-build
按照如上方式操作后,你可能会发现自己怎么不OK呢?!可能自己就是那不幸运的一部分,如果你没有成功也不用着急,可以参考以下方式,接着来Do it!
在终端运行:which node
获取路径如下:/usr/local/bin/node
重新配置如下:
step 3:
测试输出效果:
安装Package Control
如果需要使用Sublime Test安装插件,可以访问这个网站ol.io/installation,按照说明安装Package Control。重启sublime text,在package control Install中搜索这个插件并下载。也就是说这个插件可以在sublime中直接搜索下载。
I. pacman的图形前端
pacman的官方并没有发布有图形界面的前端,其他的开发者发布了可用的pacmanGUI图形前端。
PacmanXG4 — 是一个 pacman 的 GUI 前端。
不依赖于 GTK 或者 Qt,仅仅依赖 X11。它可以完成以下功能:
安装/移除/升级软件包
搜索/过滤软件包
获取软件包信息,包括截图
降级软件包 (需要 AUR/downgrade 工具)
刷新包数据库,同步镜像
一键式系统升级
Find out which package a specific file belongs to (include file with pkgfile utility)
YAOURT 支持
J. 如何打造一个令人愉悦的前端开发环境
使用到的工具:
NodeJs (组件管理)
GIT (代码管理)
browserify (模块化)
Sass (CSS预编译工具)
Grunt (自动化工具)
在文件夹下新建3个空文件夹
build,src,test
环境初始化(其实就是生成一个package.json)
npm init
2.安装Grunt
npm install grunt --save-dev
新建Gruntfile.js
mole.exports = function(grunt) {
// Project configuration.,项目配置,组件配置
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
});
// Load the plugin that provides the "uglify" task.
// grunt.loadNpmTasks('grunt-contrib-uglify');
// Default task(s).
//定义动作
grunt.registerTask('default', []);
};
4.执行grunt,是否出行done,则grunt配置完成
5.grunt常用插件
contrib- 前缀是grunt官方团队提供的插件,否知是第三方
Contrib-jshint——javascript语法错误检查;
Contrib-watch——实时监控文件变化、调用相应的任务重新执行;
Contrib-clean——清空文件、文件夹;
Contrib-uglify——压缩javascript代码
Contrib-——复制文件、文件夹
Contrib-concat——合并多个文件的代码到一个文件中
karma——前端自动化测试工具
6.使用uglify插件
npm install grunt-contrib-uglify --save-dev
修改Gruntfile.js文件
// Project configuration.,项目配置,组件配置
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
uglify: {
options: {
banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
},
build: {
src: 'src/*.js',
dest: 'build/<%= pkg.name %>.min.js'
}
}
});
grunt.loadNpmTasks('grunt-contrib-uglify);
grunt.registerTask('default', ['uglify']);
执行grunt,自动启用uglify插件
实验,在src下新建test.js
运行grunt,查看是否生成压缩后的文件
8.使用watch,监听变化,实现自动化
安装
npm install grunt-contrib-watch --save-dev
配置
watch:{
build:{
files:['src/*.js','src/*.css'],
tasks:['uglify'],//发生变化执行uglify
options:{spawn:false}
}
}
载入
grunt.loadNpmTasks('grunt-contrib-watch');
执行
grunt.registerTask('default', ['uglify','watch']);
9.执行grunt,现在去修改test.js,会执行设定好的动作,control+c停止。
10.最终的Gruntfile.js
mole.exports = function(grunt) {
// Project configuration.,项目配置,组件配置
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
uglify: {
options: {
banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
},
build: {
src: 'src/*.js',
dest: 'build/<%= pkg.name %>.min.js'
}
},
watch:{
build:{
files:['src/*.js','src/*.css'],
tasks:['uglify'],//发生变化执行uglify
options:{spawn:false}
}
}
});
// Load the plugin that provides the "uglify" task.
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-watch');
// Default task(s).
//定义动作
grunt.registerTask('default', ['uglify','watch']);
};
11.最终的package.json文件
{
"name": "html5",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"devDependencies": {
"grunt": "^1.0.1",
"grunt-contrib-uglify": "^1.0.1",
"grunt-contrib-watch": "^1.0.0"
}
}
12.环境快速搭建
安装好nodejs
复制package.js Gruntfile.js
新建文件夹 src,test,build
执行 npm install
执行 grunt
我没有测试过,应该是可以的