npm 安装程序使用国内镜像

之前安装npm是使用了cnpm或者切换了源,但是依然有一部分东西下载走得国外的链接,所以,在这里我们讲持续更新.npmrc 的路径以帮助优化使用npm

换源

一般国内人使用npm比较慢,所以很多人都装了cnpm,但是cnpm一方面模块之间的依赖可能会不好,另一方面,重复下载很多无用的文件(@开头的):所以这里介绍一种跟好更方便的方式:

npm intall -g nrm

nrm 是用来切换npm源的一个工具。切过去之后可以很方便的切换回来,比如我要使用cnpm的镜像:

nrm use taobao

但是我觉得还是不满足,在这里推荐另外一中包安装工具yarn,它有一大优势就是不用每次都去远程服务器上取包,他会在本地保存一部分,当我们安装包的使用,直接copy一份就好。

npm install -g yarn

同样的yarn也存在换源的问题。同样的也从在一个包yrm来支持换源。

npm install -g yrm

换源:

yrm use taobao

添加cdnurl

如:chromedirver下载老是使用google的下载地址,但在国内使用很不方便,于是在安装chromedirver,就要运行命令:

  npm install chromedriver --chromedriver_cdnurl=http://npm.taobao.org/mirrors/chromedriver --CHROMEDRIVER_VERSION=2.25

但是在项目里并不是一个人来开发,所以不可能每个人都运行这样一条命令或写成shell,太low。

所以,这里提供更专业一点的办法,在package.json的更目录建立.npmrc的文件。内部加入

1
2
3
4
5
6
chromedriver_cdnurl=http://npm.taobao.org/mirrors/chromedriver
selenium_cdnurl=http://npm.taobao.org/mirrorss/selenium
phantomjs_cdnurl=http://npm.taobao.org/mirrors/phantomjs
electron_mirror=https://npm.taobao.org/mirrors/electron
node_sassurl=http://npm.taobao.org/mirrors/node_sass
puppeteer_cdnurl=http://npm.taobao.org/mirrors/puppeteer

后面的链接可以更改成其他的镜像文件,也可以(需要什么加什么)。

组件所思

组件特点

  1. 标准化: 模块是具有标准尺寸和标准接口的预制功能单元,这是组装、互换等特征的基础;
  2. 可组装:多个模块可以方便、灵活地组合、配置,以构造不同大小、不同形状、不同功能的系统;
  3. 可替换:通过用一个模块去更换另一个模块,可以改变系统的局部功能而不影响系 统的其他部分;
  4. 可维护:可以对模块进行局部修改或设置,以满足用户需求,另外可以增加新模块,扩展系统功能

npm install 时总是报phantomjs-prebuilt@2.1.14安装失败

解决办法

    npm install phantomjs-prebuilt@2.1.14 --ignore-scripts
    

npm install 时总是报phantomjs-prebuilt@2.1.14安装失败

在npm install时总是报如下错误,

尝试单独安装:npm install phantomjs-prebuilt@2.1.14 还是报错

Please report this full log at https://github.com/Medium/phantomjs

npm ERR! Darwin 15.0.0

npm ERR! argv “/usr/local/bin/node” “/usr/local/bin/npm” “install”

npm ERR! node v4.4.3

npm ERR! npm v3.10.9

npm ERR! code ELIFECYCLE

npm ERR! phantomjs-prebuilt@2.1.14 install: node install.js

npm ERR! Exit status 1

npm ERR!

npm ERR! Failed at the phantomjs-prebuilt@2.1.14 install script ‘node install.js

git submodule

开发过程中,经常会有一些通用的部分希望抽取出来做成一个公共库来提供给别的工程来使用,而公共代码库的版本管理是个麻烦的事情。今天无意中发现了Git的git submodule命令,之前的问题迎刃而解了。
添加
为当前工程添加submodule,命令如下:

    git submodule add 仓库地址 路径
    

其中,仓库地址是指子模块仓库地址,路径指将子模块放置在当前工程下的路径。
注意:路径不能以 / 结尾(会造成修改不生效)、不能是现有工程已有的目录(不能順利 Clone)
命令执行完成,会在当前工程根路径下生成一个名为“.gitmodules”的文件,其中记录了子模块的信息。添加完成以后,再将子模块所在的文件夹添加到工程中即可。
删除
submodule的删除稍微麻烦点:首先,要在“.gitmodules”文件中删除相应配置信息。然后,执行“git rm –cached ”命令将子模块所在的文件从git中删除。
下载的工程带有submodule
当使用git clone下来的工程中带有submodule时,初始的时候,submodule的内容并不会自动下载下来的,此时,只需执行如下命令:

    git submodule update --init --recursive

即可将子模块内容下载下来后工程才不会缺少相应的文件。

gogs 之 docker ssh 通信(mac)

打算用docker布置一下gogs,用来给公司建立代码库

在连接ssh时遇到要输入密码的问题

后来才发线 docker 在配置gogs是会对端口进行映射导致端口被改变所以需要用./ssh/config,来更改配置的端口号修改代码如下 ~/.ssh/config

    Host    www.macl.com

    Port    32781

然后再下载:

    git clone git@www.macl.com:lidenghui/test.git

js位运算

我们可能很少在编程中用位运算,如果没深入学习,可能也很难理解。平时的数值运算,其实是要先转换成二进制再进行运算的,而位运算就是直接进行二进制运算,所以位运算的执行效率肯定是更高的。下面通过一些实例来加深对位运算的理解。

按位与(&)

&&运算符我们都知道,只有两个都为真,结果才为真。&道理是一样的,只有两个数的值为1时,才返回1。例如1和3的按位与操作:

                0001
             &  0011
            ---------
                0001

只有对应的数为1时,结果才为1,其他都为0。判断一个数是奇数还是偶数,我们会用求余数来判断:

    function assert(n) {
            if (n % 2 === 1) {
        console.log("n是奇数");
        } else {
        console.log("n是偶数");
        }
    }
    assert(3); // "n是奇数"

我们也可以用一个数和1进行按位&操作来判断,而且速度更快:

    function assert(n) {
    if (n & 1) {
        console.log("n是奇数");
    } else {
        console.log("n是偶数");
    }
    }
    assert(3); // "n是奇数"

下面是位运算过程:

             1 = 0001
             3 = 0011
             --------
             & = 0001

奇数的二进制码的最后一位数肯定是1,而1只有最后一位为1,按位&操作之后,结果肯定只有最后一位数为1。而偶数的二进制表示的最后一位数是0,和1进行按位&操作,结果所有位数都为0。

按位或(|)

|与||操作符的道理也是一样的,只要两个数中有一个数为1,结果就为1,其他则为0。

                0001
             |  0011
            ---------
                0011

对浮点数向下求整,我们会用下面的方法:

    var num = Math.floor(1.1); // 1

我们也可以用位运算来求整:

    var num = 1.1 | 0; // 1

其实浮点数是不支持位运算的,所以会先把1.1转成整数1再进行位运算,就好像是对浮点数向下求整。所以1|0的结果就是1。

按位非(~)

按位非就是求二进制的反码:

    var num = 1; // 二进制 00000000000000000000000000000001
    var num1 = ~num; // 二进制 11111111111111111111111111111110

我们知道,js中的数字默认是有符号的。有符号的32位二进制的最高位也就是第一位数字代表着正负,1代表负数,0代表整数。那到底 等于多少呢?最高位为1代表负数,负数的二进制转化为十进制:符号位不变,其他位取反加1。取反之后为 ,加1之后为 ,十进制为-2。

按位异或(^)

按位异或是两个数中只有一个1时返回1,其他情况返回0。

                0001
             ^  0011
            ---------
                0010

数字与数字本身按位异或操作得到的是0,因为每两个对应的数字都相同,所以最后返回的都是0。

我们经常会需要调换两个数字的值:

    var num1 = 1, num2 = 2, temp;
    temp = num1;
    num1 = num2; // 2
    num2 = temp; // 1

如果装逼一点的话,可以这样:

    var num1 = 1, num2 = 2;
    num1 = [num2, num2 = num1][0];
    console.log(num1); // 2
    console.log(num2); // 1

如果想再装的稳一点的话,可以这样:

    var num1 = 1, num2 = 2;
    num1 ^= num2; // num1 = num1 ^ num2 = 1 ^ 2 = 3
    num2 ^= num1; // num2 = num2 ^ (num1 ^ num2) = 2 ^ (1 ^ 2) = 1
    num1 ^= num2; // num1 = num1 ^ num2 = 3 ^ 1 = 2
    console.log(num1); // 2
    console.log(num2); // 1

有符号左移(<<)

有符号左移会将32位二进制数的所有位向左移动指定位数。如:

    var num = 2; // 二进制10
    num = num << 5; // 二进制1000000,十进制64

如果要求2的n次方,可以这样:

    function power(n) {
        return 1 << n;
    }

    power(5); // 32

1的二进制是01,左移5位就是0100000,十进制就是2的5次方32。

有符号右移(>>)

有符号右移会将32位二进制数的所有位向右移动指定位数。如:

    var num = 64; // 二进制1000000
    num = num >> 5; // 二进制10,十进制2

求一个数的二分之一:

var num = 64 >> 1; // 32

有符号左移与右移不会影响符号位。

无符号右移(>>>)

正数的无符号右移与有符号右移结果是一样的。负数的无符号右移会把符号位也一起移动,而且无符号右移会把负数的二进制码当成正数的二进制码:

    var num = -64; // 11111111111111111111111111000000
    num = num >>> 5; // 134217726

所以,我们可以利用无符号右移来判断一个数的正负:

    function isPos(n) {
    return (n === (n >>> 0)) ? true : false;     
    }

    isPos(-1); // false
    isPos(1); // true

-1>>>0虽然没有向右移动位数,但-1的二进制码已经变成了正数的二进制码:

所以-1>>>0的值为4294967295。

总结

以上的例子在平常可能会比较容易用到或看到,也是属于比较容易理解的。一些比较复杂的、难理解的,我觉得应该尽量少用,因为会给阅读者带来困难,也会给自己带来麻烦。

visual studio code terminal command

之前一直用sublime text 但是sublime text在linux 上的中文输入问题一直让人很蛋疼,前两天刚看了一个博客发现了一个和sublime text 差不多的一个开发编辑器。于是就打算试试,感觉还不错就推荐一下

问题

命令行启动

linux 直接使用 code {文件名}打开对应的文件

mac 上没有 code 命令需要自己安装

  1. 按下Command + Shift + P

  2. 输入shell

  3. 选择Shell Command : Install code in PATH,这样自动安装code命令行启动

root启动

linux 上使用 sudo code {文件名} 会报错

    It is recommended to start vscode as a normal user. To run as root, you must specify an alternate user data directory with the --user-data-dir argument.

所以要加上 sudo code --user-data-dir=/,之后会有一个空目录,选择要打开的文件或目录即可

git

如果要使用编辑器自带的git工具需要安装git,mac由于使用的是Xcode的git命令,需要安装Xcode之后才能使用。