作者归档

一次关于换行符的问题解决

做程序的,大多应该都知道目前主流系统中,Windows、linux(unix)换行符的差异,最近就因为疏忽,搞了个很没头绪的bug。

写node cli,由于是Windows下开发的,换行符默认CRLF,发布后也可以正常执行,唯独使用mac的兄弟装完发现运行cli命令提示如下错误

env: node\r: No such file or directory

各种调试私活不行,最后偶然发现bin入口文件是CRLF,尝试改为LF,再次发布,一切正常。

这也是第一次受到换行符的影响,因为git提交时配置了自动转LF,这次是因为publish到npm时还没用提交到git仓库,导致换行符出错,直接不被mac系统识别。

npm link、yarn link及yarn workspaces使用

前端项目越来越大,成熟的团队免不了分模块开发再集成,有时候我们也会发布一些npm包用于拆分维护各种模块,这种时候,在正式发布前,我们的包往往不太方便测试,比如要输出bin等操作。

还好,npm以及后起之秀yarn都为我们提供了便捷的方式。

1、npm link/yarn link

在希望同步开发的组件包下执行(假设为component-a)

npm link
// or
yarn link

如果是npm,执行后如果项目没有node依赖,会在根目录创建一个空的node_modules,yarn则不会
查看更多...

使用yarn配置resolutions解决依赖错误

去年3月份,npm圈子发生过这样一件事,一个不过 11 行的工具函数left-pad被作者从npm上撤下,所有直接和间接依赖它的包就这么齐刷刷挂了,包括babel和react-native这样每天安装数万的热门项目。而Azer删除他所有的npm包又是另一个故事:Azer写了一个工具叫kik发布在npm上,这天有个同名的公司律师找上门要求他删掉,Azer不从,这律师就找上npm,npm把包的管理权限转给了这家公司——当然,Azer就怒了,从npm上解放了所有自己发布的包。

事件之后,有人给出了类似问题的解决之道,使用npm的bundledDependencies。不过,很多库作者并不会真的这样用起来,于是,今天又碰到了类似的问题,vue前端界自然是人尽皆知,配套的vue-loader更可谓是必需品,就是在vue-loader里引入的一个库——js-beautify,今天从1.6.14更新到了1.7.0,但是作者似乎写了个bug,于是依赖于node构建的我们,出现了如此异常

Module build failed: Error: Cannot find module './lib/beautify'
//...

官方issue里便出现了如此景象 查看更多...

Jetbrains系IDE同一项目多Git仓库操作

最近项目中涉及同项目下多git仓库的操作,习惯命令行的同事建议写脚本,习惯IDE的我当然是尝试IDE操作咯,稍微模式一番后发现IDE还是没让我失望,下面简单记录下基本操作(以Webstorm为例)。

为了方便演示,建了几个空仓库,demo-root、demo-sub1、demo-sub2、demo-sub3,先拉去demo-root,作为顶层项目:

jetbrains-cvs-demo1

然后拉去第一个子项目放到demo-root下,以demo-sub1为例,依次拉取demo-sub1 查看更多...

工作五周年小记

不知不觉,已工作整五年。

五年,从一个懵懵懂懂的小毕业生到一个可独挡一面的项目骨干,再到跳槽转行又跳槽,最后又跳回老东家,认识到不少好的、不好的人或事,都一定程度上促进了我的成长。

还记得,从2012年8月27入职第一家公司,到2015年4月22第一次换工作甚至从做了三年的Java转行前端,再到2016年5月18再次不甘平庸的跳槽做前端架构及leader,但企业太小始终折腾不过日渐衰败的大环境,终于,在今年的4月23日公司研发解散了,几经周折后,在5月18日又回到转行做前端的第一家企业,做了更能挑起自己技术热情的研发岗。 查看更多...

Kotlin Android扩展使用及流行框架支持

接上篇,整理一下Kotlin在Android平台上应用的一些实例及方法。

Kotlin Android Extensions

Kotlin针对Android提供了Kotlin Android Extensions,可以很大程度上增强Android的开发体验。
背景
相信每个Android开发人员都很清楚findViewById()函数,并且备受摧残,毫无疑问,大量的findViewById()会造成代码阅读上的干扰和错误定位的难度,虽然有类似Butterknife之类的库可以通过注解实现绑定,但在实际使用过程中还是要为每个变量增加注解,倘若出现大量注解,维护难度应该不亚于直接编码,而其优点无非是代码看起来简洁了,但整体看似乎并不是特别优雅,且需要增加额外的运行库。

现在,Kotlin Android Extensions插件给我们提供了更优雅的方法,且不需要额外引入运行库,比如,我们的代码可以像下面这样写: 查看更多...

是时候在Android开发中使用Kotlin了

早在2015年,就开始断断续续接触Kotlin,最初是因为使用与Kotlin同公司的Intellij IDEA系列,从官网了解到Kotlin,也在博客记录了《初识Kotlin》。去年2月份,Kotlin终于发布了1.0正式版,又一次引爆热点,业内人员纷纷尝试Kotlin开发Android等场景,也有人拿其与Groovy、Scala甚至Swift对比,但与Java相比终归都是民间玩法。

直至今年5.18,Google 在 I/O 2017 上宣布 Android 加入了对 Kotlin 编程语言的支持,并将Kotlin语言作为安卓开发的一级编程语言。至此,Kotlin终于完全被IT界大众所认识(据我所知,在此之前,很多使用Jetbrains系IDE的小伙伴,并不知道Kotlin的存在,也不知道自己日常离不开的IDE就是Kotlin开发的)。

有了Google的大力支持,相信未来必然像当年换ADT为Android Studio一样顺风顺水,毋庸置疑,作为Android程序员的你,是时候开始尝试在Android开发中使用Kotlin了。目前Android Studio 2.x可以安装插件使用,Android Srudio 3.x之后将默认支持Kotlin。下面参考kotlinlang官方使用引导整理了简单的引导教程,这里默认你是已经在使用Android Studio进行日常开发的程序员,细节将一带而过。

安装Kotlin插件

Kotlin插件与3.0版本的Android Studio捆绑在一起。 如果你使用的是较早版本,则需要安装Kotlin插件。在Android Studio的插件管理中直接搜索安装,安装完成后重启即可。 查看更多...

基于Vue.js的SSR方案之Nuxt.js

前端技术真是分分合合、合合分分,从前些年HTML、CSS、JavaScript混写到模块化的CommonJS、AMD、CMD,模块多了影响加载,又有了grunt、gulp、webpack等打包工具,最后发展到现在类似Vue的单文件组件,表面来看,似乎更爽了,但这样的模块化还是要靠写的人来把控了,稍有不慎,团队还真有人把.vue玩成当年的.html。

今天要说的是最近了解的一款基于Vue.js的SSR框架——Nuxt.js,用过react.js的童鞋可能都或多或少接触过Next.js,没错,这玩意和它是做同一件事的,正如前面所说,分分合合、合合分分,前后端分离好不容易在国内实施得火热起来,可百度并不怎么认你的单页App,且盲目使用之余,很多App文件过于庞大,以至于按需加载后首页渲染性能还是不理想,面对这样的问题,有SEO需求、对首屏渲染有提升要求的技术小伙伴们又在前端的小圈子里划分出了服务端,也因此有了传统型的express、koa、adonisJS等,但这并不能阻止我们前进的脚步,回到现实,当前火热的react.js、angularjs、vue.js都有了服务器端渲染方案,于是因为工作用vue.js的缘故,接触了Nuxt.js。 查看更多...

前端跨域问题及解决方案

对于绝大多数B/S系统开发者来说,"跨域"并不是什么陌生的词汇,但也往往因为熟悉而忽略其本质。众所周知,Web浏览器往往是不安全的,出于安全考虑,Netscape公司1995年在浏览器中引入同源策略(same-origin policy),目的是为了保证用户信息的安全,防止恶意的网站窃取数据。目前,所有浏览器都实行这个政策,"跨域"问题也由此形成。

所谓同源,简单的讲,就是网址必须是同协议、同域名(主域、子域与不同子域都称为非同域名)、同端口,两个网址出现任一项不同则出现跨域。

受同源策略影响,出现跨域的情况,我们不能做以下三类事

1)不能操作cookie、LocalStorage(SessionStorage) 和 IndexDB
2)不能操作DOM
3)不能发送AJAX 请求

显然,同源策略影响的不止是"恶意网站",合理的用途也受到影响。下面将介绍如何规避上面三种限制。
查看更多...

IDEA系列64bit启动时Failed to create JVM…问题解决

大概2015年的时候,写过一篇名为《合理使用Intellij Idea,提高开发效率,避免内存溢出》的博文,简单介绍了自己在使用idea过程中解决操作界面卡顿等性能问题的方法。意外的是,近一年来百度来路每天都有二三十个搜idea内存优化找到上面提到的文章,可能国内最近使用idea的用户越来越多了吧。

个人猜测,可能是因为当时版本的idea系列安装时并不会提示用户该软件有64bit的入口,而且安装后的快捷方式默认都是32bit,所以大部分用户都是直接使用32bit做开发,而且很多用户怨声载道。而近一年的版本已经做了改进,如果系统是64bit,默认有复选框提示生成32bit、64bit的快捷方式,这样一来,稍微有点计算机基础的用户,可能都会选择使用64bit作为入口了。

随之而来的,可能是对于内存的调优,但稍有不慎,可能出现Failed to create JVM:error code -1。

网上大部分介绍是说没有配置JAVA_HOME,当然如果是非idea用户,真有可能忽略了此步骤,但如果本身就是Java开发人员,基本可以忽略这个可能性(当然是在自己确认无误的情况下)。接下来遇到这样的问题,就不能看错误提示表象了,可能是改了配置,配置参数不对或者内存不够,因为初始化最大内存750,作为开发人员,基本也可以忽略这个了。所以,只有一种情况,配置不对。

最新版的配置参数有所缩减,移除了-XX:MaxPermSize等配置项,基本如下(64bit) 查看更多...