ゆずめも

メモ的なブログです。主に勉強した事について書いてます。

vscodeのお引っ越し

vscodeをinsiderにしてみようと思い
vscodeからvscode insiderにお引っ越しした

code.visualstudio.com

プラグインの引っ越し

一つずつ探して、インストールしていくの面倒だと思ってたら楽に移行できる方法を見つけた

前提

以下の記事を参考にvscodevscode insiderのコマンドをpathに通しておく

qiita.com

方法

code --list-extensionsを実行するとインストール済みのプラグイン一覧が表示される

それをファイルに書き込んでおいてxargsを利用してプラグインを順番にインストールする

code --list-extensions > vscode_plugins
cat vscode_plugins | xargs -n 1 code-insiders --install-extension

key-bind & setting

vscodeの設定はJSONで定義されているので

コピペが一番早いのでは

ってなってしまって特に調べてない…

require('./module').defaultについて

GWから乃木坂にハマりました、お久しぶりです。

後輩氏がjsやってて、なんだこれってツイート見たので書いとこうってモチベ

jsのモジュール

JSのモジュールはけっこういっぱいある(nodeのcommonjsがcommonjsじゃない問題はめんどくさいので置いとく)
よく見るのは下の2種類

  • ES Modules: ECMA Scriptの仕様
  • CommonJS: Node.jsが採用してるモジュールシステム

ES Modulesの実装状況

chromeとかedgeみたいな一部だと実装されてるけど
ES Modulesで書かれたものは基本動かない

なのでNode.jsで動かす時なんかはcommonjsに変換する

commonjsへの変換

esmodules => commonjsの変換はBabelやTypescript使う気がする

www.typescriptlang.org

babeljs.io

今回はbabel使って試してみる

変換

とりあえずesmodulesで書かれたものを用意する

export default class Nogizaka {
  constructor() {}
}

これをbabelで変換(babel-preset-es2015とか)すると

"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

var Nogizaka = function Nogizaka() {
  _classCallCheck(this, Nogizaka);
};

exports.default = Nogizaka;

重要なのはexports.defaultの部分で、export defaultになってるのでrequire('./module').defaultと書く必要が出て来る

これをNode.jsとかのコードでよく見るmodule.exports = Nogizakaにしたい

module.exports = Nogizakaしたい

babelにはbabel-plugin-add-module-exportsってプラグインがある
それを使用するとmodule.exportsの行が追加される

npm i -D babel-plugin-add-module-exports
babel --presets=es2015 --plugins=add-module-exports index.js
"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

var Nogizaka = function Nogizaka() {
  _classCallCheck(this, Nogizaka);
};

exports.default = Nogizaka;
module.exports = exports["default"];

これで一応.defaultしなくてもrequire('./module')でいけるようになる

まとめ

乃木坂はいいぞー

chromebookにnodebrewをインストールして使おうと思ったらハマった

chromebookで開発者モードを使うとできることが広がることに気づいて開発者モード始めました

使ってるchromebookとは違う。pixel欲しい…
今回の検証に使ったchromebookHTML5 Conferenceで頂いたものです

yuzu441.hateblo.jp

開発者モード

他に記事がいっぱいあるので省略

nodebrewインストー

github.com

普通にインストースクリプトを実行すると$HOME/.nodebrew
要するに/home/chronos/user/.nodebrewというディレクトリにインストールされる

この状態でPATHを通してnodebrew installとか実行すると.nodebrew以下にnodeのプログラムがインストールされるんだけど、Permission deniedで怒られる(chmod 777とかやってみたけど駄目)

原因?

未だに原因よくわかってないけど、$HOME以下に書き込めない? (でもnodebrewはインストールできてるからそういうことでもなさそう)

== 2017/06/17 追記 ==

golangのインストールページ見てたら、実行権限つけて再マウントしてた。
chromeosのファイルシステムは基本的に書き込めないものらしい

sudo mount -i -o remount,exec /home/chronos/user/

github.com

とりあえずの解決方法

nodebrewはNODEBREW_ROOTを指定すると任意のディレクトにインストールすることができる

なので.bashrcに以下の内容を書き込んだ

export NODEBREW_ROOT=/usr/local/.nodebrew

この状態でインストースクリプトを実行すると/usr/local/.nodebrewにインストールされて、そこにPATHを通してやると普通にnodebrew install v8.1.2とかできる

まとめ

なんとなくできるかなーと思って始めたら思ったよりハマってしまった。。
いろんな記事見てたらnvmでインストールしてるものばかりで、nvmができるならnodebrewでもできるでしょって気持ちだったからできてホッとした

nodebrewはなんとか動いたけどcurlがアップデートできなくて、僕らの戦いは始まったばかりだ…