dependencies
顾名思义,就是依赖,但是这个依赖只在产品环境(–production)使用安装。
npm install 的时候会默认安装。

devDependencies
开发依赖, npm install 也会安装,但是 npm install –production 时 不会安装这个依赖。

例如:
project dependency 依赖如下:
dependencies: {
 ”a”: ‘0.0.1’,
 ”b”: ”0.0.2
},
devDependencies: {
 ”c”: “0.0.3”
},
npm install 会将 a b c 三个包都安装。而
npm install –production 只会安装 a b 两个包。
假如:
包 a 依赖两个包 x y;
dependencies: {
 ”x”: ‘0.0.1’
},
devDependencies: {
 ”y”: “0.0.2”
},
那么在项目 project dependency 中 npm install 会将 x 这个包安装,而 y 这个包不会安装。因为 依赖 a,但是不没有要开发 a,依赖的应该是 a 的产物才对。

peerDependencies
假设:
project dependency 依赖 的 b 包,但是 b 包并没有 dependencies 而有一个 peerDependencies。
peerDependencies: {
 ”a”: “0.0.1”
},
对于 b 包来说,host(宿主) 是 project dependency,那么一般使用 b 包的时候,几乎可以肯定的是会使用 a 包,所以 a 此时就可以是 b 的一个 peerDependencies。
即:在使用 b 包的时候,几乎可以肯定的是要使用 a 包。所以 b 包没有 dependencies 而有 peerDependencies。
此时 npm install project dependency 的依赖时,就将 b 包 的依赖也装上了,所以不需要显式的声明 b 包 的 dependencies 了。
不过如果 b 包 的 peerDependencies 和 宿主的依赖版本不同的时候,可能会出问题,所以此时最好将两个版本统一。例如 project dependency 依赖的 a 包,和 b 包 peerDependencies 依赖的 a 包。

一个用户可以属于多个组,而一个文件/文件夹可以属于一个组。组的权限就可以应用于文件/文件夹

添加组:
sudo groupadd aNewGroup
给组添加不同用户:
sudo usermod -a -G aNewGroup user1
 sudo usermod -a -G aNewGroup user2
置组权限:
sudo chgrp -R aNewGroup /path/to/the/directory
 sudo chmod -R 770 /path/to/the/directory

即可。

1. 修改postgresql.conf

postgresql.conf存放位置在

/etc/postgresql/x.x/main

这里的x取决于你安装PostgreSQL的版本号,编辑或添加下面一行,使PostgreSQL可以接受来自任意IP的连接请求。

listen_addresses = '*'

2. 修改pg_hba.conf

增加这一行

#TYPE DATABASE USER CIDR-ADDRESS METHOD
host all all 0.0.0.0/0 md5

3. 重启服务

sudo service postgresql restart

第二步,修改密码

此时,远程登录时,可能提示密码不正确,修改默认用户的密码。
切换账号:sudo -u postgres psql
修改密码:ALTER USER postgres WITH PASSWORD 'postgres';(注意后面有分号)

或者直接修改 Linux 账户的密码(未尝试)

步骤一:删除用户postgres的密码
sudo passwd -d postgres

步骤二:设置用户postgres的密码
sudo -u postgres passwd

系统提示输入新的密码
Enter new UNIX password:
Retype new UNIX password:

如果想新建不同的账户,则按照 Linux 创建账号的步骤来就可以了,因为 PostgreSQL 默认使用的是基于 Linux 的账户认证系统。

主要可能是新版本系统(或者软件)对于获取设备的返回数据格式作了修改
所以这里在 cordova build ios 获取可用设备列表的时候,会报 Cannot read property ‘toLowerCase’ of undefined。

解决方法很简单
打开这个文件:platforms/ios/cordova/lib/list-emulator-build-targets,
大概 54 行左右

device.availability.toLowerCase().indexOf('unavailable') < 0
改成:
device.isAvailable
所以改完之后完整的代码是:
availableDevicesInCategory.forEach(function (device) {
    // console.log(device);
    if (device.name === deviceType.name.replace(/\-inch/g, ' inch') && device.isAvailable) {
        availAcc.push(device);
    }
});
如果还不对,看一看这个 console.log(device); 输出是什么,我这里输出的是:
{ state: 'Booted',
  isAvailable: true,
  name: 'iPhone 11 Pro',
  udid: 'A4E72C68-XXXX-XXXX-XXXX-DFB57EB137B7' 
}
所以看看这个输出的内容就知道怎么改了。

var x = [1,2,3,4,5,6,7,8,9,10];
// var x = (Array(101).join(0).split('')).map((a,i)=>{return i+1;});
var findIndex =  (target, x, lowIndex, highIndex) => {
	var low = lowIndex || 0;
	var high = highIndex === undefined ? (x.length - 1) : highIndex;
	var mid = Math.ceil((low + high) / 2);
    // var mid = Math.floor((low + high) / 2);
	// console.log('Mid : ', mid);
	if(target === x[mid]){
		return mid;
	} else {
		if(target < x[mid]){
			// console.log('Low : ', x.slice(low, mid));
			return findIndex(target, x, low, mid - 1);
		} else {
			// console.log('High : ', x.slice(mid, high));
			return findIndex(target, x, mid + 1, high);
		}
	}
};
x.forEach((z)=>{
	console.log(findIndex(z, x));
});