Windows使用rsync命令部署代码
rsync是Linux和Mac自带的命令,Windows就有点坑爹了。Windows上的解决办法有几种:
- 安装cygwin
- 安装cwRsync
- Win10开启Linux子系统
我尝试了前面两个方案,坑也很多,最终都没成功使用。想着以后可能用到Linux的机会可能会多一点,最后决定使用第三种方案。虽然坑也比较多,但最终算是成功了。
一、开启子系统
这里直接百度经验吧win10系统如何开启子系统。我最后选择的是Ubuntu系统。
二、遇到的问题
- 如何在bash环境下切换到代码目录
在这里可能会好奇,安装的子系统存在于Windows的位置是哪?我找了一下是在
C:\Users\{userName}\AppData\Local\Packages\...\rootfs\
下,可以直接在windows的c盘搜索rootfs
,这个就是Linux子系统的根目录了。回到问题,在bash中输入:
df
$ df
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 62914556 40265808 22648748 65% /
none 62914556 40265808 22648748 65% /dev
none 62914556 40265808 22648748 65% /run
none 62914556 40265808 22648748 65% /run/lock
none 62914556 40265808 22648748 65% /run/shm
none 62914556 40265808 22648748 65% /run/user
C: 62914556 40265808 22648748 65% /mnt/c
D: 60812284 4126804 56685480 7% /mnt/d
可以看到,在子系统中对应的Windows的
C盘
就是/mnt/c
,这样就可以找到存放代码的目录了。
- npm和node报错
具体报错信息:
$ npm -v
: not foundram Files/nodejs/npm: 3: /mnt/c/Program Files/nodejs/npm:
: not foundram Files/nodejs/npm: 5: /mnt/c/Program Files/nodejs/npm:
/mnt/c/Program Files/nodejs/npm: 6: /mnt/c/Program Files/nodejs/npm: Syntax error: word unexpected (expecting "in")
Windows本来已安装了Node,而在bash下想要调用已安装的npm导致报错。原因可能是windows上文件的存储格式与linux的格式不一样,比如windows的文件内容的换行符在linux上会显示r,导致linux解析不了。
解决办法:https://github.com/Microsoft/WSL/issues/1512#issuecomment-303517504。
思路是:在子系统上再次安装node和npm(相当于在电脑安装了两套node)
这里简单记录一下
## 安装node和npm
$ curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
$ sudo apt-get install -y nodejs-legacy
$ sudo apt install npm
## 改变~/.profile里的PATH
PATH="$HOME/bin:$HOME/.local/bin:/usr/bin:$PATH"
## 然后执行命令使配置生效:source ~/.profile
## 查看linux的npm安装位置
$ which npm
/usr/bin/npm
## 然后把/usr/bin/添加到系统的环境变量里面
(这一步在windows上的操作(控制面板\系统和安全\系统\高级系统设置\环境变量),并且/usr/bin/要在windows的node路径前面)
## 查看一下是否ok
$ whereis npm
npm: /usr/bin/npm /mnt/c/Program Files/nodejs/npm /mnt/c/Program Files/nodejs/npm.cmd
## 最后就可以了,在bash环境下就会先执行/usr/bin里面的npm,这样就能让linux找到npm的命令了。
- npm run build 报错
由于mac文件名忽略大小写,而Windows是大小写敏感的,可能会导致一些模块在mac上能打包,而Windows上出错了,这时候把文件名改为Windows能识别的大小写就行了。
「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」
(๑>ڡ<)☆谢谢老板~
使用微信扫描二维码完成支付