【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模式)

超级舒适。

结束

广告
将在 10 秒后关闭
bannerAds