作者归档:yyx219

nrm安装与配置


nrm 是一个 npm 源管理器,允许你快速地在 npm 源间切换。

安装nrm


全局安装nrm。

npm install -g nrm

使用


执行命令nrm ls查看可选的源。

nrm ls                                                

*npm ---- https://registry.npmjs.org/
cnpm --- http://r.cnpmjs.org/
taobao - http://registry.npm.taobao.org/
eu ----- http://registry.npmjs.eu/
au ----- http://registry.npmjs.org.au/
sl ----- http://npm.strongloop.com/
nj ----- https://registry.nodejitsu.com/

带*的是当前使用的源,上面的输出表明当前源是官方源。

切换

如果要切换到taobao源,执行命令

nrm use taobao

增加

你可以增加定制的源,特别适用于添加企业内部的私有源,执行命令

nrm add <registry> <url>

其中reigstry为源名,url为源的路径。

删除

执行命令

nrm del <registry>

删除对应的源

测试速度

可以通过

nrm test 

* npm ---- 2973ms
yarn --- 2654ms
cnpm --- 14664ms
taobao - 1272ms
nj ----- Fetch Error
npmMirror 1816ms
edunpm - Fetch Error

测试相应源的响应时间。

vue2.x 项目 使用sass

1,使用save会在package.json中自动添加。

npm install node-sass --save-dev
npm install sass-loader --save-dev

注:

通常使用npm安装会出现以下报错,安装失败。(网路问题)

可以通过淘宝的npm镜像安装node-sass,解决以上问题。

$ npm install -g cnpm –registry=https://registry.npm.taobao.org (安装淘宝镜像)

$ cnpm install node-sass –save (使用淘宝镜像安装node-sass)

注:安装淘宝镜像后,仍无法安装node-sass的情况,执行下列命令

$ npm install --save node-sass --registry=https://registry.npm.taobao.org --disturl=https://npm.taobao.org/dist --sass-binary-site=http://npm.taobao.org/mirrors/node-sass

说明:

–registry=https://registry.npm.taobao.org 淘宝npm包镜像

–disturl=https://npm.taobao.org/dist 淘宝node源码镜像,一些二进制包编译时用

–sass-binary-site=http://npm.taobao.org/mirrors/node-sass 这个才是node-sass镜像

Linux(CentOS,Debian,Ubuntu,Fedora)系统下的数据盘挂载

通常新开通的Linux云服务器数据盘都未做分区和格式化。在进行数据盘挂载之前我们要先进行分区以及格式化操作。注意,挂载操作会清空数据,请确认挂载盘内无重要数据!

以下是分区、数据盘挂载详细步骤:

一、查看数据盘。

[root@win23 /]# fdisk  -l

首先,远程SSH登录CentOS服务器,查看磁盘。通常我们是用“df –h”命令查看服务器磁盘,但是在没有分区和格式化数据盘之前,使用 “df –h”命令是无法看到数据盘的,因此我们要使用“fdisk -l”(注意是字母l,而不是数字1)命令进行查看。

磁盘的命名规则为/dev/vd(a-z)。系统盘默认是/dev/vda。我们需要找到系统以外多的磁盘/dev/vdb。(注意不要挂错盘,从而导致把系统盘格式化!)

二、对数据盘进行分区。

[root@win23 /]# fdisk /dev/vdb

执行“fdisk /dev/vdb”命令,对数据盘进行分区。根据提示,依次输入“n”、“p”、“1”、两次回车,分区就开始了,很快就会完成。然后输入“p”可查看到刚才的分区结果。此时我们可以看到,新的分区vdb1已建立完成。

确认分区成功后,输入“w”保存分区设置

三、格式化新建的分区。

[root@win23 /]# mkfs.ext4  /dev/vdb1

以ext4为例(可自主决定选用其它文件格式,如ext3等):使用“mkfs.ext4 /dev/vdb1”命令对新分区vdb1进行格式化(注意:格式化新建的/dev/vdb1,不要写成/dev/vdb),格式化的时间根据硬盘大小有所不同。

四、创建挂载目录,挂载新分区。

[root@win23 /]# mkdir /hdd

[root@win23 /]# mount /dev/vdb1 /hdd/

[root@win23 /]# cd /hdd/ 

[root@win23 hdd]# ls

1、输入命令“mkdir /hdd“创建挂载目录hdd(可自定义);

2、执行“mount /dev/vbd1 /hdd/”命令,将新分区vdb1挂载到hdd目录下;

3、“cd”进入/hdd目录,然后执行命令“ls”查看目录下的文件,查看到lost+found 表示挂载成功。

[root@win23 hdd]# df  -h

然后用“df -h”命令查看,出现以下信息就说明挂载成功,可以开始使用新的分区了。

五、写入硬盘启动信息。

磁盘挂载后重启服务器挂载就会失效,因此我们需要写入硬盘启动信息,下次重启后自动挂载数据盘。

1.输入命令:

 echo "/dev/vdb1   /hdd     ext4       defaults  0 0" >>/etc/fstab

2.输入命令:cat /etc/fstab进行查看,如果出现下列信息,表示硬盘启动信息已写入完成。

   至此,CentOS系统下的数据盘挂载完成。

给原生js增加一个精准判断数据类型方法的封装

1.直接在原生Object原型下增加方法
Object.prototype.isTypeOf = function (f) {
    var type = Object.prototype.toString.call(this);
    if (f instanceof Function) {
       f.call(this, type)
    }
    return type
}
2.使用方法
  var arr = [
            1,
            {},
            [],
            function(){

            },
            RegExp,
            'hello world',
        ];


        for (let index = 0; index < arr.length; index++) {
            const element = arr[index];
            console.log(element.isTypeOf());
        }

给原生添加一个Each的遍历方法

1.基于原生的封装:
Array.prototype.each = function (f) {
   for (var index = 0; index < this.length; index++)
        f.apply(this, [this[index], index, this])
        return this
}
2. 使用方法:
var arr = ['hello','world'];
arr.each(function(item,index,arr){
    console.log(item,index,arr);
})

分时函数

分时创建DDOM节点函数

 var arr = [];
        for (var i = 1; i <= 32524; i++) {
            arr.push(i) 
        }
        var timeChunk = function (arr, fn, count) {
            var obj, t;
            var len = arr.length;
            var start = function () {
                for (var i = 0; i < Math.min(count || 1, len); i++) {
                    var obj = arr.shift();
                    fn(obj)
                }
            };
            return function () {
                t = setInterval(function () {
                    if (len === 0) {
                        return clearInterval(t);
                    }
                    start() //开始
                }, 200)
            }
        }

        var renderFriendList = timeChunk(arr, function (obj) {
            var div = document.createElement('div');
            div.innerHTML = obj;
            document.body.appendChild(div)
        },3)

        renderFriendList();

常用git&npm配置命令

常用git配置命令

1、npm使用淘宝镜像源

(能加快npm下载速度)

npm config set registry https://registry.npm.taobao.org
2、node-sass使用淘宝镜像

(能解决node-sass安装失败问题)

npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/
3、npm恢复官方镜像源

(发布npm包时必须切换回官方镜像源)

npm config set registry https://registry.npmjs.org
4、git 配置全局用户名、邮箱

(用于git工具记录代码修改的作者信息)

git config --global user.name neohan
git config --global user.email neohan666@qq.com
5、git 配置ssh
ssh-keygen -t rsa
6、git 配置全局字符集编码

(防止中文commit信息乱码)

git config --global i18n.commitencoding utf-8
git config --global i18n.logoutputencoding utf-8
export LESSCHARSET=utf-8
7、git 配置全局不自动转换换行符

(解决windows和max系统的默认换行符不一致问题)

git config --global core.autocrlf false
8、git 设置能检测文件名大小写

(在需要配置的项目根目录下运行该命令)

git config core.ignorecase false

npm和yarn的镜像源的查看与修改

NPM

查询当前镜像

	npm get registry 

设置为淘宝镜像

	npm config set registry http://registry.npm.taobao.org/

设置回默认的官方镜像

	npm config set registry https://registry.npmjs.org/

同理 YARN

查询当前镜像

yarn config get registry

设置为淘宝镜像

yarn config set registry http://registry.npm.taobao.org/

设置回默认的官方镜像

yarn config set registry https://registry.yarnpkg.com

设置成功都有类似下面的输出

yarn config v1.16.0
success Set "registry" to "http://registry.npm.taobao.org/".
Done in 0.05s.

tsconfig.json 文件说明

用有道词典做的复制黏贴翻译,如果有错,在所难免,这里仅作为一个阅读参考

{
  "compilerOptions": {
    /* Visit https://aka.ms/tsconfig.json to read more about this file */

    /*基本选项*/
    /* Basic Options */
    // "incremental": true,                   /* 启用增量编译 // Enable incremental compilation  */
    "target": "es5",                          /* 指定ECMAScript目标版本:'ES3'(默认)、'ES5'、'ES2015'、'ES2016'、'ES2017'、'ES2018'、'ES2019'、'ES2020'或'ESNEXT'。 // Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
    "module": "commonjs",                     /* 指定模块代码生成:'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020',或'ESNext'。// Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
    // "lib": [],                             /* 指定要包含在编译中的库文件 // Specify library files to be included in the compilation.。 */
    // "allowJs": true,                       /* 允许编译javascript文件。 // Allow javascript files to be compiled.*/
    // "checkJs": true,                       /* 报告.js文件中的错误。 //Report errors in .js files. */
    // "jsx": "preserve",                     /* 指定JSX代码生成:‘preserve’、‘response -native’或‘react’。 // Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
    // "declaration": true,                   /* 生成相应的.d.ts文件。 // Generates corresponding '.d.ts' file. */
    // "declarationMap": true,                /* 为每个对应的sourcemap生成一个'.d.ts文件。 //Generates a sourcemap for each corresponding '.d.ts' file.*/
    // "sourceMap": true,                     /* 生成相应的.map的文件。 Generates corresponding '.map' file. */
    // "outFile": "./",                       /* 连接并发出输出到单个文件。 Concatenate and emit output to single file. */
    "outDir": "./js",                         /* 将输出结构重定向到目录。 Redirect output structure to the directory. */
    // "rootDir": "./",                       /* 指定输入文件的根目录。用于使用——outDir控制输出目录结构。 Specify the root directory of input files. Use to control the output directory structure with --outDir. */
    // "composite": true,                     /* 使项目编译 Enable project compilation */
    // "tsBuildInfoFile": "./",               /* 指定用于存储增量编译信息的文件 Specify file to store incremental compilation information */
    // "removeComments": true,                /* 不要向输出发出注释。 Do not emit comments to output. */
    // "noEmit": true,                        /* 不发出输出。 Do not emit outputs. */
    // "importHelpers": true,                 /* 导入从“tslib”中发出助手。 Import emit helpers from 'tslib'. */
    // "downlevelIteration": true,            /* 当目标是“ES5”或“ES3”时,在“for-of”、“spread”和“destructuring”中提供对迭代的全面支持。Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
    // "isolatedModules": true,               /* 将每个文件置换为单独的模块(类似于' . transpilemodule ')。Transpile each file as a separate module (similar to 'ts.transpileModule'). */


    /* 严格的类型检查选项 */
    /* Strict Type-Checking Options */
    "strict": true,                           /* 启用所有严格类型检查选项。Enable all strict type-checking options. */
    // "noImplicitAny": true,                 /* 对隐含的“any”类型的表达式和声明引发错误。Raise error on expressions and declarations with an implied 'any' type. */
    // "strictNullChecks": true,              /* 启用严格的空检查。Enable strict null checks. */
    // "strictFunctionTypes": true,           /* 启用函数类型的严格检查。Enable strict checking of function types. */
    // "strictBindCallApply": true,           /* 在函数上启用严格的“bind”、“call”和“apply”方法。*Enable strict 'bind', 'call', and 'apply' methods on functions. */
    // "strictPropertyInitialization": true,  /* 启用严格检查类中的属性初始化。Enable strict checking of property initialization in classes. */
    // "noImplicitThis": true,                /* 在隐含的“any”类型的“this”表达式上引发错误。Raise error on 'this' expressions with an implied 'any' type. */
    // "alwaysStrict": true,                  /* 以严格模式解析并为每个源文件发出“use strict”。 Parse in strict mode and emit "use strict" for each source file. */

    /*附加检查*/
    /* Additional Checks */
    // "noUnusedLocals": true,                /* 报告未使用的本地变量的错误。Report errors on unused locals. */
    // "noUnusedParameters": true,            /* 报告未使用参数的错误。Report errors on unused parameters. */
    // "noImplicitReturns": true,             /* 当函数中并非所有代码路径都返回值时,报告错误。Report error when not all code paths in function return a value. */
    // "noFallthroughCasesInSwitch": true,    /* 报告switch语句中的故障案例的错误。Report errors for fallthrough cases in switch statement. */

    /*模块解析选项*/
    /* Module Resolution Options */
    // "moduleResolution": "node",            /* 指定模块解析策略:'node' (node .js)或'classic' (TypeScript pre-1.6)。 Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
    // "baseUrl": "./",                       /* 用于解析非绝对模块名称的基本目录。Base directory to resolve non-absolute module names. */
    // "paths": {},                           /* 将导入重新映射到相对于“baseUrl”的查找位置的一系列条目。A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
    // "rootDirs": [],                        /* 根文件夹的列表,其组合内容表示运行时项目的结构。List of root folders whose combined content represents the structure of the project at runtime. */
    // "typeRoots": [],                       /* 包括类型定义的文件夹列表。List of folders to include type definitions from. */
    // "types": [],                           /* 类型声明文件中编译。Type declaration files to be included in compilation. */
    // "allowSyntheticDefaultImports": true,  /* 这并不影响代码发出,只是类型转换。Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
    "esModuleInterop": true,                  /* 通过为所有导入创建名称空间对象,启用CommonJS和ES模块之间的发射互操作性。意味着“allowSyntheticDefaultImports”。Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
    // "preserveSymlinks": true,              /* 不解析符号链接的真实路径。Do not resolve the real path of symlinks. */
    // "allowUmdGlobalAccess": true,          /* 允许访问全局UMD格式从模块。Allow accessing UMD globals from modules. */

    /*源映射选项*/
    /* Source Map Options */
    // "sourceRoot": "",                      /* 指定调试器应该定位TypeScript文件的位置,而不是源文件的位置。Specify the location where debugger should locate TypeScript files instead of source locations. */
    // "mapRoot": "",                         /* 指定调试器应该定位映射文件的位置,而不是生成的位置。Specify the location where debugger should locate map files instead of generated locations. */
    // "inlineSourceMap": true,               /* 发出带有源映射的单个文件,而不是拥有单独的文件。Emit a single file with source maps instead of having a separate file. */
    // "inlineSources": true,                 /* 需要设置“—inlineSourceMap”或“—sourceMap”。Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */

    /*实验选项*/
    /* Experimental Options */
    // "experimentalDecorators": true,        /* 启用对ES7装饰器的实验性支持。 Enables experimental support for ES7 decorators. */
    // "emitDecoratorMetadata": true,         /* 启用对为装饰器发出类型元数据的实验支持。Enables experimental support for emitting type metadata for decorators. */

    /*高级选项*/
    /* Advanced Options */
    "skipLibCheck": true,                     /* 跳过声明文件的类型检查。Skip type checking of declaration files. */
    "forceConsistentCasingInFileNames": true  /* 不允许inconsistently-cased对同一个文件的引用。Disallow inconsistently-cased references to the same file. */
  }
}

1.Redis简介

Redis是一种开放源代码(BSD许可)的内存数据结构存储,用作数据库,缓存和消息代理。它支持数据结构,例如 字符串,哈希,列表,集合,带范围查询的排序集合,位图,超日志,带有半径查询的流空间索引和流。Redis具有内置的复制,Lua脚本,LRU逐出,事务和不同级别的磁盘持久性,并通过以下方式提供高可用性:Redis Sentinel和Redis Cluster自动分区。

您可以 对这些类型运行原子操作,例如追加到字符串; 在哈希中增加值 ; 将元素推送到列表 ; 计算集的交集, 并集和差 ; 或获得排序集中排名最高的成员。

为了获得出色的性能,Redis使用 内存中的数据集。根据您的用例,您可以通过将数据集 偶尔转储到磁盘上,或者通过将每个命令附加到log来持久化它。如果您只需要功能丰富的网络内存缓存,则可以选择禁用持久性。

Redis还支持琐碎的设置主从异步复制,具有非常快速的非阻塞式第一次同步,自动重新连接以及网络拆分中的部分重新同步。

其他功能包括:

交易次数
发布/订阅
Lua脚本
生存时间有限的键
LRU收回钥匙
自动故障转移
您可以从大多数编程语言中使用Redis 。

Redis是用ANSI C编写的,并且可以在大多数POSIX系统中使用,例如Linux,* BSD,OS X,而无需外部依赖。Linux和OS X是Redis开发和测试最多的两个操作系统,我们建议使用Linux进行部署。Redis可以在基于Solaris的系统中使用,例如SmartOS,但是尽力提供了支持。Windows版本没有官方支持。