【GAS】想在WSL上使用clasp,但Chrome不能正常运行的问题解决方法
增补(2019-02-28)
其实,当你登录clasp时,下面
?Authorize clasp by visiting this url:
https://accounts.google.com/o/oauth2/v2/auth?access_type=なんとかかんとか。。。
因此,尽管我觉得完全不需要这篇文章,但是考虑到可以通过WSL的bash启动Windows的Chrome并且带来一些方便,所以还是保留这篇文章。去网页上复制这种URL,然后粘贴到Chrome浏览器中,只是可以登录而已。
故事概要:
-
- GASの開発をWeb上ではなく、WSL上のEmacsで行いたいと思っていた
-
- そこで、Google謹製のローカル開発環境claspを導入しようとしたが、ひとつ問題があった
-
- claspにloginするときに、Chromeが表示されて、そこでログインしなければならないのだが、筆者のWSL環境でChromeを起動できなかった
- そこでclaspコマンドはDOSプロンプト(cmd.exe)、開発はEmacsでやっていたが、いろいろ楽しいことができなくて困っていた
详细信息请参考https://qiita.com/query1000/items/259a60ba1be8743b858b。
本文的梗概:
-
- WSLからWindowsのChromeをシェルコマンドで実行すればいいという記事を見つけた
-
- これでWSL上のclasp loginでWindowsのChromeを使ってログインし、快適な作業環境を手に入れた
- 特にすばらしいのがEmacsのauto-shell-commandである
前提条件
-
- Windows 10を使っている
-
- WSLを使っている
- GASで開発が出来ている
清理了UNIX系统下Chrome的残余文件
根据以下文章的参考,我试图启动Windows的Chrome浏览器,因为WSL具有能够运行Windows上的exe程序的出色功能。
但是出现错误。
之前在WSL上安装并且无法运行,所以放弃了,但Chrome还留着。
按照以下方法删除了。
$ sudo dpkg -l | grep chrome
$ sudo apt purge chrome-stable
通过WSL调用Windows上的Chrome的Shell脚本
直接从上面的网站上复制粘贴过来。
#! /bin/sh
exec /mnt/c/Program\ Files\ \(x86\)/Google/Chrome/Application/chrome.exe "$@"
请设置 ~/bin 的路径。
重新安装UNIX系统中的 node 和 npm。
听说如果没有在全局设置中安装node,所以我重新安装了一次。
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install nodejs
$ sudo apt install npm
在之前的文章中提到的错误是否被解决了,或者没有发生。
相反,我被告知需要inquirer@6.0.0或7.0.0版本才能进行安装。
由于安装不成功,我选择忽略它。
删除Windows上的Node
由于可以从WSL运行Windows程序,结果出现了下面这样奇怪的错误。
$ 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.js后它就消失了。
终于能在WSL中运行node和npm了。
$ node --version
v8.10.0
$ npm --version
3.5.2
虽然我担心 npm 工具的陈旧性,但总算能安装成功了。
(2020年5月7日付)如果使用TypeScript的话…
建议参考这篇文章:https://qiita.com/HeRo/items/f2ce057c6b1456e896ad
安装Clasp
$ npm i @google/clasp -g
安裝clasp。
$ clasp login
以登录。
真是好厉害,Windows上的Chrome成功启动并成功登录!这花了好长时间。
在使用WSL时,有什么令人高兴的好处?
-
- バッチファイルがシェルスクリプトで書ける
-
- TypeScriptが使える(でも、Web側で修正が難しいので今回は見送り)
- cmd.exeとzshを行ったり来たりしないでずむ
虽然有细节方面的差异,但最重要的目标是使用Emacs的auto-shell-command。
自动执行命令
在Emacs中,当对文件进行修改时,可以自动执行命令。这样,当文件被修改后,可以自动进行push,并进行部署。
参考链接:https://qiita.com/ongaeshi/items/0e45e4bfa5a813c1b9e4
虽然有点尴尬,但还是来晒一下我的init.el文件吧。
(require 'deferred)
(require 'auto-shell-command)
(require 'popwin)
;; キーバインドの設定
;(global-set-key (kbd "C-c C-m") 'ascmd:toggle) ; Temporarily on/off auto-shell-command run
;(global-set-key (kbd "C-c C-,") 'ascmd:popup) ; Pop up '*Auto Shell Command*'
;(global-set-key (kbd "C-c C-.") 'ascmd:exec) ; Exec-command specify file name
;; ;; エラー時のポップアップを見やすくする
;(push '("*Auto Shell Command*" :height 20 :noselect t) popwin:special-display-config)
;; ;; 結果の通知をGrowlで行う (optional)
;;(defun ascmd:notify (msg) (deferred:process-shell (format "growlnotify -m %s -t emacs" msg))))
(ascmd:add '("/mnt/c/Users/cf/GDrive/foo" "foopush.sh")) ; fooの下を触ったらpush
#! /bin/sh
cd /mnt/c/Users/cf/GDrive/foo
if [ $? -ne 0 ]; then
echo "cd failed"
exit 1
fi
if [ -e js.js ]; then
mv js.js js.html
fi
if [ $? -ne 0 ]; then
echo "rename failed"
exit 1
fi
clasp push
if [ $? -ne 0 ]; then
echo "clasp failed"
exit 1
fi
clasp deploy --deploymentId:????????????????????????????????????????????????????
if [ $? -ne 0 ]; then
echo "deploy failed"
exit 1
fi
mv js.html js.js
if [ $? -ne 0 ]; then
echo "rename failed"
exit 1
fi
js.js是客户端JavaScript文件,可以在GAS的HTML中包含使用。
我在之前的文章中也提到过这件事,因为GAS只会带上HTML和JS,所以在推送之前将文件重命名为HTML,在推送之后再将其重命名回JS。(因为Emacs只有将扩展名命名为js才会进入js模式)
超级舒适。
结束