NPM 现在变得越来越流行了,但是很多人可能只是用了其中一小部分的功能,但是 NPM 其实有一大票功能可以用,不信你试试 npm -help 看看。

而本文的主要目的就是介绍 npm version 命令,此命令用来更改项目的版本号。这个版本好就是项目中 package.json 文件中的 version 字段。
一般情况下,都类似于这样一段 json。

1
2
3
4
5
{
    "name"           : "npm-version",
    "description"    : "npm version command",
    "version"        : "1.1.1611"
}

怎么用呢?
例如,
你修复了一个 bug,要增加一个最小的版本号,那么

1
npm version patch

如果想要更新次要版本号的话,那么

1
npm version minor

更或者,你要更新主版本号的话,那么

1
npm version major

哈哈哈,是不是不用手动更新这个文件了?

还有一点点

如果你正好用 git 来管理你的项目,那么 npm version 也可以顺便创建一个版本 commit 和 tag 。

钩子

最神奇的事情就是给了我们 pre 和 post 这两个钩子。

即:
在 npm version 执行之前,pre 这个钩子,就会被执行,而在 npm version 执行之后,post 这个钩子也会被执行。
所以呢,如果你想在更新版本号之后在执行一些操作,那么就应该这样写。

1
2
3
"scripts" : {
	"postversion" : "git push && git push --tags"
}

这样子,在更改了版本号之后,就会自动执行这些 git 命令了。
那么想在更新版本号之前呢?咋办啊?

1
2
3
4
5
6
7
"scripts" : {
	"start" : "node app.js",
	"pretest":"rm -Rf build && gulp build && cd build && npm install --production",
	"test":"./test/run.sh",
	"preversion":"npm test",
	"postversion" : "git push && git push --tags"
}

看,完成了,一个还算基本完成了的 package.json 文件,在改变版本号之前,先测试一下嘛。

如果想看更多的 npm version 的信息,请访问:https://docs.npmjs.com/cli/version

来源:http://blog.js-republic.com/npm-version-is-cool-you-should-use-it/

需求是这样子的,就是想在家里弄个服务器,然后开发,将各种中间代码都推送到这个服务器上,当然了,肯定是使用版本管理中的 Git 嘛。但是当开发到一定程度的时候,也是需要将这个代码推送到公开的代码管理网站,例如 coding 或者 github。

那么怎么做呢?

本地的开发和版本管理就按照正常的 Git 的那一套走。
然后想要推送到 Github 上的话,就按照下面的步骤来。
1. 现在 Github 上新建一个 repository,然后获得一个可以推送的地址,例如 https://github.com/a/a.git;
2. 然后将这个 git 地址添加到本地的 git 中。

1
git remote add A https://github.com/a/a.git; # A 是这个 remote 的名称

然后使用

1
git remote -v

就可以查看本地的推送地址列表了。
例如:

1
2
3
4
a   https://github.com/a/a.git (fetch)
a   https://github.com/a/a.git (push)
origin  https://git.net/b/b.git (fetch)
origin  https://git.net/b/b.git (push)

3. 然后就可以使用命令将这个代码推送到 GitHub 了。

1
git push a master

当然这个是完全一样的代码的情况下,
如果还需要在两个不同环境有差异的话,那么最好新建一个分支。

1
git checkout -b GitHubBranch

然后在这个分支下面修改差异,这个时候就要将这个代码推送到 GitHub 的 GitHubBranch 分支了。

1
git push a GitHubBranch

然后再在 GitHub 合并 GitHub 上的 master 和 GitHubBranch 两个分支就可以了。
这时候,GitHub 上面的 master 分支就可以是最新的代码了。
当然了合并到哪个分支按照自己的需求来。

合并分支我用的是 pull request 合并的,(因为貌似我用了两个不同的账户?)。

完了。

主要是给自己记录用的,其实。

尊敬的刘总,各位领导及各位同事:

  大家好,很荣幸自己可以代表员工在华泰商学院的开学典礼上发言,感谢公司各位领导一直以来的关心及指导。

  作为一名普通的物业管理员,与所有员工一样,正在亲历着公司因为互联网化所带来的全新变化,在这个变化中,我们不断的尝试、创新、形成属于我们华泰物业自己的文化,这是一次全新挑战,同时也是我们员工们一次难得的成长机会。

  公司成立华泰商学院的目的,我觉得是想我们在公司转型成长的过程中能够跟的上脚步,让我们用知识来武装自己,用知识提升我们的能力,用能力更好的服务于业主。用更加专业化的服务来赢得业主的信任,从而获得业主对我们自身对华泰物业的认可。

  在工作中我相信每个人都有自己所要实现的梦想和想要达到的目标,可是空谈梦想和目标只会让我们离它越来越远。

  目标的实现需要公司领导的带领,但也需要我们自己的努力。设定目标,做好计划,主动思考,加强自身学习,不断尝试,坚持到底。公司为我们每一个人提供了同等的平台 ,商学院的成立正是我们起航的码头,在这个平台中,我们学习他人之长,补自己之短,我们可以把自己懂得会的拿出来分享与他人,在这个大家庭中一起进步,一起成长。

  古人曾说,三日不读书,便觉语言无味,面目可憎,现在我们有了一个这样的学习平台,再不读书,不充实自己,面部的表情都可憎起来了,谈何对业主热情服务呢。

  在公司大目标的前提下,建立自己所要实现的小目标,只有我们小目标的实现,最后才能完成公司大目标的实现。因此学习的过程,充实自己的过程虽是自己人生价值实现的过程,但也更是为公司成长和蜕变付出自己努力的过程。

  最后预祝我们自己的商学院越办越好,也希望我们可以成长为比今天更好的自己。

  谢谢大家。

1. 在Windows中添加一个HOME环境变量,值为%USERPROFILE%,如下图:
environment variable
2. 在 "开始>运行" 中打开 %Home%,新建一个名为 _netrc 的文件。

3. 用文本编辑器打开 _netrc 文件,输入 Git 服务器名、用户名、密码,并保存。示例如下:

machine git.xxx.com
login git_user
password git_pwd

OK, 试试吧,还需要不需要用户名密码了。

在 Windows 下创建 MongoDB 服务命令,记录下。

    sc create MongoDB binPath= "\"D:\Program Files\mongodb\server\3.0\bin\mongod.exe\" 
    --service --config=\"D:\mongodb\mongod.cfg\"" DisplayName= "MongoDB" start= "auto"

密码保护:visual studio ultimate 2013

2015/06/10 / 要查看留言请输入您的密码。 / 889 围观

这是一篇受密码保护的文章,您需要提供访问密码:

iscolor 是否是颜色 接受正常的颜色关键字和十六位表示法以及RGB表示法等。
isnumber 是否是数字
isstring 是否是字符串
iskeyword 是否是关键字 这个没搞明白到底用来判断什么东西。
isurl 是否是 url  例如 url(...),貌似必须这样子才行。

ispixel 是否是像素  应该判断给定的值是否是 数字+px 的。
ispercentage 是否是百分比 应该判断给定的值是否是 数字+% 的。
isem 是否是 em
isunit 是否是某个单位的,两个参数 如果待验证的值为指定单位的数字则返回 true

用法:(同时包含了 when 的一种用法)
.mixin (@a) when (isnumber(@a)) {
padding:@a;
}
.x {
.mixin(5);
}
如果 .x 中的 mixin 给的是数字的话,输出:
.x {
padding:5;
}
否则什么都不输出。

来源:

http://isux.tencent.com/h5-performance.html

以记录。

来源:

http://isux.tencent.com/css-animation-skills.html

以记录。

面向对象编程

封装

对象生成的原始模式

1
2
3
4
var Cat = {
    name  : '',
    color : ''
}

然后生成实例对象,

1
2
3
4
5
6
7
8
9
var cat1 = {};
 
cat1.name = '大毛';
cat1.color = '黄色';
 
var cat2 = {};
 
cat2.name = '二毛';
cat2.color = '黑色';

很简单,但问题是,这样生成的“实例对象”其实和原型对象之间基本没有任何联系。而且生成多个实例的时候,没有简洁的方法,会非常麻烦。

原始模式的改进

1
2
3
4
5
6
function Cat(name,color){
    return {
        name  : name,
        color : color
    }
}

然后生成实例对象,但其实就等于在调用函数,返回一个对象。

1
2
var cat1 = Cat('大毛','黄色');
var cat2 = Cat('二毛','黑色');

这种问题是,如果 Cat 中不进行额外的处理,这里仍旧不能反映出来 cat1 和 cat2 内在的联系。

构造函数模式

1
2
3
4
function Cat(name,color){
    this.name = name;
    this.color = color;
}

现在就可以生成实例对象了。

1
2
var cat1 = new Cat('大毛','黄色');
var cat2 = new Cat('二毛','黑色');

这时 cat1 和 cat2 会自动含有一个 constructor 属性,指向他们的构造函数。

1
2
console.log(cat1 instanceof Cat); //true
console.log(cat2 instanceof Cat); //true

但此时这种方式仍旧存在其固有的问题。假设这里有一个方法。

1
2
3
4
5
6
function Cat(name,color){
    this.name = name;
    this.color = color;
    this.type = '猫科动物';
    this.eat = function(){console.log('吃老鼠');}
}

生成实例

1
2
3
var cat = Cat('大毛','黄色');
console.log(cat.type); // 猫科动物
cat.eat(); // 吃老鼠。

表面上没什么问题,用的时候也很好用,但是假如我们需要生成大量的 Cat 的实例,那么每个实例都会有 type 属性和 eat 方法,而且这两个都是一摸一样的内容,导致了内存的浪费,因为此时两个实例的相同属性和方法,并不是同样的内存地址。会存在多份。

那么,能不能将所有的相同的属性和方法只存在一份,然后每个实例同样的也可以使用呢?答案肯定是可以的。

prototype 模式

1
2
3
4
5
6
7
function Cat(name,color){
    this.name = name;
    this.color = color;
}
 
Cat.prototype.type = '猫科动物';
cat.prototype.eat = function(){console.log('吃老鼠');}

这时候,

1
2
var cat1 = new Cat('大毛','黄色');
var cat2 = new Cat('二毛','黑色');

此时,再多的实例对象,其 type 属性和 eat 方法都指向的是同一份,也即相同的内存地址。

1
console.log(cat1.eat === cat2.eat); //true

prototype 模式的验证方法

为了配合 prototype 模式, javascript 定义了一些辅助方法,帮助我们更方便的使用它。

1
isPrototypeOf()

这个方法用来判断,某个 prototype 对象和某个实例之间的关系。

1
console.log(Cat.prototype.isPrototypeOf(cat1)); //true

hasOwnProperty()
次方法用来判断某个属性到底是prototype 对象的属性还是类定义的(本地属性)。

1
2
console.log(cat1.hasOwnProperty('name')); true
console.log(cat1.hasOwnProperty('type')); false

in 运算符

此运算符用来判断某个属性是不是存在于某个实例中,即某个实例是否包含某个属性,不管是本地还是继承自 prototype

1
2
3
console.log("name" in cat1); // true
console.log('type' in cat1); // true
console.log('typo' in cat1); // false

in 运算符还可以用来遍历对象的属性。

1
2
3
for(var key in cat1){
    console.log('cat1[' + key ' ]=' + cat1[key]);
}

当然在遍历的时候可以使用 hasOwnProperty() 来限制输出的属性。