npm 入么,以及cnpm,rnpm

nodejs 包管理工具 npm,如何使用呢?cnpm,rnpm又是什么呢?

NPM

npm 是什么?

npm 为你和你的团队打开了连接整个 JavaScript 天才世界的一扇大门。它是世界上最大的软件注册表,每星期大约有 30 亿次的下载量,包含超过 600000 个 包(package) (即,代码模块)。来自各大洲的开源软件开发者使用 npm 互相分享和借鉴。包的结构使您能够轻松跟踪依赖项和版本。

相关网址

https://www.npmjs.com/

http://npm.taobao.org/mirrors

https://www.runoob.com/nodejs/nodejs-npm.html

下面是关于 npm 的快速介绍:

npm 由三个独立的部分组成:

  • 网站
  • 注册表(registry)
  • 命令行工具 (CLI)

网站 是开发者查找包(package)、设置参数以及管理 npm 使用体验的主要途径。

注册表 是一个巨大的数据库,保存了每个包(package)的信息。

CLI 通过命令行或终端运行。开发者通过 CLInpm 打交道。

使用

## 产看版本号
$ npm -v
2.3.0

## 在当前项目安装一个依赖性
$ npm install <Module Name>

## 全局安装
$ npm install npm -g

## 展示当前项目已安装依赖
$ npm list

## 查看某个包的具体信息
$ npm list grunt

## 展示全局所有包
$ npm list -g

## 卸载某个包
$ npm uninstall express

## 搜索相关 包
$ npm search express

## 自己初始化一个包
$ npm init 

包管理

npm是nodeJS包管理工具,经常会遇到下载依赖包非常缓慢,或者是下载不了的情况,所以需要更换包的源。
淘宝npm地址:http://npm.taobao.org/

临时

$ npm --registry https://registry.npm.taobao.org install express

永久生效

$ npm config set registry https://registry.npm.taobao.org

验证设置是否成功

$ npm config get registry

# OR
$ npm info express

通过cnpm 使用

$ npm install -g --registry=https://registry.npm.taobao.org
# 使用
$ cnpm install install express

cnpm

需求由来

由于node安装插件是从国外服务器下载,受网络影响大,速度慢且可能出现异常。所以如果npm的服务器在中国就好了,所以我们乐于分享的淘宝团队(阿里巴巴旗下业务阿里云)干了这事。来自官网:“这是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。

也就是说我们可以使用阿里布置在国内的服务器来进行node安装。

2.使用方法
1.使用阿里定制的 cnpm 命令行工具代替默认的 npm,输入下面代码进行安装:

$ npm install -g cnpm --registry=https://registry.npm.taobao.org

2.检测cnpm版本,如果安装成功可以看到cnpm的基本信息。

cnpm -v

3.以后安装插件只需要使用cnpm intall即可

cnpm 用法和 npm 的用法是一样的。

rnpm

rnpm是什么?React Native基础之Linking Libraries链接库配置,Android/iOS RN原生功能依赖

“rnpm”是一个社区开源项目,该可以提供原生代码自动依赖链接的功能

React Native不是所有的应用都需要使用所有的原生代码开发的功能,并且需要包含所有特性的代码来支持,这样开发的应用包就会变得很大很臃肿。
但是我们还是希望能够简单快速的添加原生的特性功能。在这种情况下面我就有一种方案:把一下互不干扰的功能进行打包成静态库。

pnpm

正如我所提到的,在pnpm的作者Zoltan Kochan发表了“为什么要用pnpm?”之后,我才知道pnpm。

我不会介绍太多的细节(因为这篇文章已经发布很久了),但是你可以查看我的最初的帖子来寻找更多的内容,同时在Twitter上加入讨论。
但是,我想指出的是,pnpm运行起来非常的快,甚至超过了npm和yarn。

为什么这么快呢? 因为它采用了一种巧妙的方法,利用硬链接和符号链接来避免复制所有本地缓存源文件,这是yarn的最大的性能弱点之一。
使用链接并不容易,会带来一堆问题需要考虑。

正如Sebastian在Twitter上指出的那样,他最初是打算在yarn中使用符号链接的,但是由于其他一些原因放弃了它。

同时,正如在Github上拥有2000多个Star那样,pnpm能够为许多人所用。

此外,截至2017年3月,它继承了yarn的所有优点,包括离线模式和确定性安装。

参考

  • https://www.cnblogs.com/onew/p/11330439.html
  • https://juejin.im/post/6844903616109641736
  • https://www.jianshu.com/p/3d48785295d2
  • http://ian.wang/292.htm

MySQL Docker 配置文件挂载 问题

跨虚拟机Docker环境下,拉起MySQL挂载磁盘是,估计大家都会遇到的问题

问题

Docker 拉起官方的 MySQL容器,指定使用挂载的配置文件时,报错如下:

mysql: [Warning] World-writable config file '/etc/mysql/conf.d/mysql.cnf' is ignored.

解决否

已解决

方案

这其实是 Docker 在 Windows 下的坑! 当然了 Docker for Mac 也遇到同样的问题。

这牵涉到MySQL对配置文件的可见性安全性的一个要求。MySQL希望它的配置文件是不可编辑的,可查看不可写的。所以就需要配置对应的umask 0555.

以上问题在特定环境下才会暴露出来。我这边是 Mac OS从宿主机的磁盘一路挂载到vbox,再挂载到Docker,垮了3个环境。为了方便,我直接umask就是 0777。

因为需要在宿主机上编辑代码,Docker环境内运行测试代码。

Windows 上环境我也试过,宿主机挂载到vbox,vbox里装了一个Ubuntu虚拟机,虚拟机内安装了Dcoker,也是跨了3个环境,Windows的磁盘和Linux的权限管理是两套体系,所以umask就直接在vbox上配置了。

那么现在MySQL容器需要的是 0555 权限,我尝试在Ubuntu虚拟机中将挂载的目录的访问权限改为 0555,但没有成功,改不动。

具体原因没有深究, 网上也查阅了很多方案,都试了没成功,接下来是我自己摸索出来方案。

我的解决方案是这样:

把同一个目录在vbox里面的Ubuntu虚拟机内挂载了两次,也就是同一个文件夹挂载了两个文件夹,然后两个文件夹的umask 不一样。

配置如下:

sudo mount -t vboxsf -o umask=000,dmode=777,fmode=777 Jumei /mnt/vbox
sudo mount -t vboxsf -o umask=222 Jumei /mnt/ro-vbox

这样,你挂载代码啊,MySQL的数据目录/var/lib/mysql/,就挂载0777目录——/mnt/vbox下,当需要挂载只读配置文件时,Docker volume就挂载 /mnt/ro-vbox 目录,这样就满足了配置文件只读,数据文件读写的配置要求。

以下是样例:

file: ./docker-compose.yaml

version: "2"
    mysql:
        image: mysql:5.7
        ports:
            - "3306:3306"
        volumes:
            - /mnt/ro-vbox/compose/bs/config/mysql/my.cnf:/etc/mysql/my.cnf:ro
            - /mnt/ro-vbox/compose/bs/config/mysql/conf.d:/etc/mysql/conf.d:ro
            - /mnt/vbox/compose/bs/mysql/:/var/lib/mysql/:rw
            - /mnt/vbox/compose/bs/log/mysql/:/var/log/mysql/:rw
        environment:
            MYSQL_ROOT_PASSWORD: "123456"
        networks:
            tasker_net:
                ipv4_address: "192.168.0.6"

Linux du、df、free 查看内存 磁盘剩余空间

如何用Linux命令查看磁盘,内存的占用,来看看du,df,free这三个命令的用法

du

显示每个文件和目录的磁盘使用空间,df 是来自于coreutils 软件包,系统安装时,就自带的;我们通过这个命令可以查看磁盘的使用情况以及文件系统被挂载的位置;

du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的。

参数:

-a或-all 显示目录中个别文件的大小。
-b或-bytes 显示目录或文件大小时,以byte为单位。
-c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
-k或--kilobytes 以KB(1024bytes)为单位输出。
-m或--megabytes 以MB为单位输出。
-s或--summarize 仅显示总计,只列出最后加总的值。
-h或--human-readable 以K,M,G为单位,提高信息的可读性。
-x或--one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-L<符号链接>或--dereference<符号链接> 显示选项中所指定符号链接的源文件大小。
-S或--separate-dirs 显示个别目录的大小时,并不含其子目录的大小。
-X<文件>或--exclude-from=<文件> 在<文件>指定目录或文件。
--exclude=<目录或文件> 略过指定的目录或文件。
-D或--dereference-args 显示指定符号链接的源文件大小。
-H或--si 与-h参数相同,但是K,M,G是以1000为换算单位。
-l或--count-links 重复计算硬件链接的文件。

使用小例子

## 展示home目录占有空间大小
$ du -hs /home

## 展示 更目录下所有文件、文件夹占用空间大小
$ du -hs /* 

## 展示这个文件终于空间大小
$ du -hs /var/log/nginx.log

df命令

df命令用于显示目前在Linux系统上的文件系统的磁盘使用情况统计,显示指定磁盘文件的可用空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

-a或--all:包含全部的文件系统;
--block-size=<区块大小>:以指定的区块大小来显示区块数目;
-h或--human-readable:以可读性较高的方式来显示信息;
-H或--si:与-h参数相同,但在计算时是以1000 Bytes为换算单位而非1024 Bytes;
-i或--inodes:显示inode的信息;
-k或--kilobytes:指定区块大小为1024字节;
-l或--local:仅显示本地端的文件系统;
-m或--megabytes:指定区块大小为1048576字节;
--no-sync:在取得磁盘使用信息前,不要执行sync指令,此为预设值;
-P或--portability:使用POSIX的输出格式;
--sync:在取得磁盘使用信息前,先执行sync指令;
-t<文件系统类型>或--type=<文件系统类型>:仅显示指定文件系统类型的磁盘信息;
-T或--print-type:显示文件系统的类型;
-x<文件系统类型>或--exclude-type=<文件系统类型>:不要显示指定文件系统类型的磁盘信息;
--help:显示帮助;
--version:显示版本信息。

使用小例

## 展示磁盘使用情况
$ df -h

## 展示磁盘使用情况以及挂在的磁盘类型
$ df -Th

free命令

free命令是一个显示系统中空闲和已用内存大小的工具。free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等

-b  以Byte为单位显示内存使用情况。
-k  以KB为单位显示内存使用情况。
-m  以MB为单位显示内存使用情况。
-o  不显示缓冲区调节列。
-s<间隔秒数>  持续观察内存使用状况。
-t  显示内存总和列。
-V  显示版本信息。

输出行介绍

  • Mem:表示物理内存统计
  • total:表示物理内存总量(total = used + free)
  • used:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。
  • free:未被分配的内存。shared:共享内存。
  • buffers:系统分配但未被使用的buffers 数量。cached:系统分配但未被使用的cache 数量

缓存区
– -/+ buffers/cache:表示物理内存的缓存统计
– used2:也就是第一行中的used – buffers-cached 也是实际使用的内存总量。 //used2为第二行
– free2= buffers1 + cached1 + free1 //free2为第二行、buffers1等为第一行
– free2:未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。
– Swap:表示硬盘上交换分区的使用情况

使用小例

## 展示当前系统内存占用
$ free 

## 展示内存使用,单位 -m
$ free -m

## 展示系统内存占用,以及交换区
$ free -mt

## 没3s展示一次 系统内存、交换区使用情况
$ free -mt -s 3

Linux tar gzip bzip zip打包 压缩 解压 命令

每次拿到压缩文件都不知道怎么解包,还在拿着后缀去百度?快快收下这篇文章吧,涵盖所有压缩格式,一站解决。

打包压缩格式

  • .zip
  • .gz
  • .bz2
  • .tar
  • .tar.gz
  • .tar.bz2

.tar格式

打包

$ tar -cvf 打包输出文件 源文件or文件目录
  • 参数说明
-c : 打包
-v或--verbose: 显示打包过程
-f : 指定打包后的文件名

解压文件

$ tar -xvf 打包文件

## 查看内部有啥文件
$ tar -tv 打包文件
  • 参数说明
-x或--extract或--get: 从备份文件中还原文件;
-v : 展示过程
-t或--list : 列出备份文件的内容;

.gz 格式

压缩文件

## 注意:源文件会消失!
$ gzip 源文件

## 压缩文件,源文件保留
$ gzip -c -3 源文件 > 压缩文件.gz

## 递归的压缩目录
$ gzip -rv 目录
  • 参数说明
-r或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理
-<压缩效率>:压缩效率是一个介于1~9的数值,预设值为“6”,指定愈大的数值,压缩效率就会愈高;

解压缩

$ gzip -d 压缩文件

$ gunzip 压缩文件

## 详细显示中压缩的文件的信息,并不解压
$ gzip -l *

## 把当前目录中中每个压缩的文件解压,并列出详细的信息
$ gzip -dv ./*
  • 参数说明
-l或——list:列出压缩文件的相关信息;
-d或--decompress或----uncompress:解开压缩文件;

gunzip命令用来解压缩文件。gunzip是个使用广泛的解压缩程序,它用于解开被gzip压缩过的文件,这些压缩文件预设最后的扩展名为.gz。事实上gunzip就是gzip的硬连接,因此不论是压缩或解压缩,都可通过gzip指令单独完成。

.tar.gz 格式

其实,.tar.gz 格式是先将文件或目录打包文 .tar 格式,再压缩为 .gz 格式

压缩

$ tar -zcvf 压缩文件名.tar.gz 源文件

参数说明

-z或--gzip或--ungzip:通过`gzip`指令处理备份文件; 也就是 `.tar.gz`

解压

$ tar -zxvf 压缩包名.tar.gz

参数说明:

-z : 解压缩
-t : 查看压缩保内文件,但是不解压缩

.bz2 格式

压缩

## 源文件会移除
$ bzip2 源文件

## 保留源文件
$ bzip2 -k 源文件
  • 参数说明
-d或——decompress:执行解压缩;
-c或——stdout:将压缩与解压缩的结果送到标准输出;
-k或——keep:bzip2在压缩或解压缩后,会删除原始文件。若要保留原始文件,请使用此参数;

bzip2 不能压缩目录

解压缩

## 解压缩,默认不保留压缩文件。加 -k 可保留压缩文件
$ bzip2 -d 压缩文件

## 解压到标准输出:
$ bzip2 -dc filename.bz2 > filename

## 检查展示压缩文件内容,不解压
$ bzip2 -tv zipFile.bz2
  • 参数说明
-d或——decompress:执行解压缩;
-t或——test:测试.bz2压缩文件的完整性;
-v或——verbose:压缩或解压缩文件时,显示详细的信息;

.tar.bz2 格式

.tar.bz2 格式是先将文件或目录打包文 .tar 格式,再压缩为 .bz2 格式

压缩

tar -jxvf 压缩包名.tar.bz2 源文件or文件目录
  • 参数说明
-j : 使用`bzip2`处理,压缩为 .tar.bz2 格式

解压

$ tar -jxvf 压缩包名.tar.bz2
  • 参数说明:
-x : 解压
-t : 查看压缩保内文件,但是不解压缩
-C : 指定解压的目录(注意,该选项必须放在后面)

.zip 格式

一般Linux没有默认安装 zip 软件,需要手动安装 zip 以及 unzip 两个软件!

## debian,ubuntu
$ apt-get install zip unzip -y

## centos
$ yum install zip unzip -y

## mac os 目测有预装

压缩

$ zip 压缩文件名.zip 源文件

## 压缩目录
$ zip -r 压缩文件名.zip 文件夹目录

解压缩

$ unzip 压缩文件 [-d <文件解压缩后所要存储的目录>]

参考

  • https://man.linuxde.net/tar
  • https://man.linuxde.net/bzip2
  • https://segmentfault.com/a/1190000014479275