20200316のNode.jsに関する記事は9件です。

Lambdaプロキシ統合でmultipartのフォームデータをパースする

ファイル添付とかmultipartで送信されてくることがあるので、そのパース方法。
busboyというライブラリを次のように使うことで実現可能。

eventはlambda関数の入力。

    if (event.headers['content-type'] && (event.headers['content-type'] as string).includes('multipart/form-data')) {
        console.log('IT IS MULTIPART');
        const input: CreateMeProfileInput = {};
        const busboy = new Busboy({
            headers: event.headers,
            defCharset: 'utf8'
        });
        return new Promise((resolve, reject) => {
            busboy.on('file', (fieldname: any, file: any, filename: any, encoding: any, mimetype: any) => {
                console.log('File [' + fieldname + ']: filename: ' + filename + ', encoding: ' + encoding + ', mimetype: ' + mimetype);
                file.on('data', function (data: any) {
                    util.inspect(data);
                    console.log(typeof data);
                    console.log('File [' + fieldname + '] got ' + data.length + ' bytes');
                });
                file.on('end', function () {
                    console.log('File [' + fieldname + '] Finished');
                });
            });
            busboy.on('field', function (fieldname: string, value: any, fieldnameTruncated: any, valTruncated: any, encoding: any, mimetype: any) {
                console.log(util.inspect(value));
                console.log(value.toString('utf8'));
                console.log('Field [' + fieldname + ']: value: ' + util.inspect(value) + ` encoding:${encoding}, valTruncated:${valTruncated}, mimetype:${mimetype}`);
            });
            busboy.on('finish',  () => {
                console.log('Done parsing form!');
                console.log(input);
                resolve(input);
            });
            // @ts-ignore
            busboy.on('error',  (err) => {
                console.log('busboy parse error');
                console.log(input);
                reject(err);
            });
            busboy.write(event.body); // 第二引数いらない
            busboy.end();
        });
    } 
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Browser/Node.js両対応、シンプルなHTTPクライアント"bent"

Node.jsでHTTPリクエストしたいなーと思って一番メジャーそうな request - npm を覗いたら deprecated になってるじゃないですか!

代わりに、シンプルなHTTPクライアントで良いの無いかなーと調べてたら、requestのissuesコメントにあったbentというクライアントに辿り着きました。

bent

使い方はとても簡単。

localhost:3000GETしてレスポンスボディを文字列で受けたい場合...

const bent = require("bent");

const httpGet = bent("http://localhost:3000", "GET", "string");

const responseBody = httpGet("/");

これだけ。

Node.jsではhttpを、Browserではfetchというように内部で使い分けてるので、コードを統一しつつNode.jsで実行時にはCORS問題が発生しません。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Nodeインストール時に困った件

エラー内容

v12.16.1 is not found Can not fetch: https://nodejs.org/dist/v12.16.1/node-v12.16.1-darwin-x64.tar.gz

nodebrewの安定版をインストールしようとした際に
上記のようなエラーが出た。

解決策

どうやら別の方法で再インストール。

curl -L git.io/nodebrew | perl - setup
export PATH=$HOME/.nodebrew/current/bin:$PATH

出てきたPATHをbash.profileに追加。

open ~/.bash_profile

保存して閉じ、再読み込みを行う。

source ~/.bash_profile

参考にしました:
Can not fetch: とか 言われて nodebrew で node のインストールが失敗する

以上、ありがとうございました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Nodeインストール時に遭遇したエラーとその解決策

エラー内容

v12.16.1 is not found Can not fetch: https://nodejs.org/dist/v12.16.1/node-v12.16.1-darwin-x64.tar.gz

nodeの安定版をインストールしようとした際に
上記のようなエラーが出た。

解決策

どうやら別の方法で再インストール。

curl -L git.io/nodebrew | perl - setup
export PATH=$HOME/.nodebrew/current/bin:$PATH

出てきたPATHをbash.profileに追加。

open ~/.bash_profile

保存して閉じ、再読み込みを行う。

source ~/.bash_profile

参考にしました:
Can not fetch: とか 言われて nodebrew で node のインストールが失敗する

以上、ありがとうございました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

@kintone/rest-api-client をGitHubからインストールする

はじめに

@kintone/rest-api-client の開発中の機能を、GitHubからインストールして早めに使ってみました。
一般的にNPMパッケージをGitHubからインストールするときに比べて、特殊な方法が必要だったのでメモ。

注意

  • Webpackビルド環境がある前提です
  • 開発中のを勝手に使う場合、深刻なバグがある可能性もあるので自己責任で!

ディレクトリ構造

rest-api-clientは、Gitリポジトリとしては特殊な形をしています。

https://github.com/kintone/js-sdk
この@kintone/js-sdkというリポジトリ内に、サブディレクトリとしてrest-api-clientが存在します。
https://github.com/kintone/js-sdk/tree/master/packages/rest-api-client

NPMの世界では @kintone/rest-api-client という単独パッケージ扱いですが、Gitの世界では単なるサブディレクトリ。
(なんでこんな変な構成なのかは謎。こういうNPMデザインパターンもあるのか?誰か知ってたら教えてください)

なので、GitHubからこんな風にインストールしようとしてもエラーになります。

yarn add https://github.com/kintone/js-sdk/tree/master/packages/rest-api-client

方法その1(Gitのsubmoduleとして使用)

NPMではなく、Gitのsubmoduleとしてインストールします。

mkdir vendor
cd vendor
git submodule add https://github.com/kintone/js-sdk

自分でビルド

cd js-sdk/packages/rest-api-client/
yarn install
yarn build

こんな風にlibフォルダが出来ていたらビルド成功。

$ ls lib
KintoneAllRecordsError.d.ts       KintoneRestAPIClient.js   __tests__/  url.d.ts
KintoneAllRecordsError.js         KintoneRestAPIError.d.ts  client/     url.js
KintoneRequestConfigBuilder.d.ts  KintoneRestAPIError.js    http/
KintoneRequestConfigBuilder.js    KintoneTypes.d.ts         index.d.ts
KintoneRestAPIClient.d.ts         KintoneTypes.js           index.js

使うときは、こんな風に相対パスでjs-sdk/packages/rest-api-clientimportします。

import { KintoneRestAPIClient } from '../vendor/js-sdk/packages/rest-api-client'

これで、2020/3/16時点で未リリースのaddAllRecords関数だって使えちゃいます :smile:
image.png

方法その2(NPMモジュールとしてGitHubからインストール)

最初こっちのやり方考えてたんですが、方法1の方がいいと思ってやめました。

まず、Gitリポジトリ単位でjs-sdkごとインストールしてしまう。

yarn add https://github.com/kintone/js-sdk

そのままでは使えないので、該当ディレクトリに移動して自分でビルド

cd node_modules/@kintone/js-sdk/packages/rest-api-client/
yarn install
yarn build

使うときは、こんな風に@kintone/js-sdk配下のディレクトリをたどってimportします。

import { KintoneRestAPIClient } from '@kintone/js-sdk/packages/rest-api-client/lib'

rest-api-clientまで指定でOKかと思ったら、
rest-api-client/libまで指定しないとうまく動いてくれませんでした。

問題点

ビルド直後はうまく動くんですが、そのあと他のNPMモジュールを追加インストールしたら、せっかくビルドしたrest-api-client/libがきれいさっぱり無くなっちゃいました。インストール毎にクリーンにしてくれるんですね。。

たとえば.gitignoreで該当フォルダを除外しないようにして、libをコミットしたりすればいけますが、node_modulesの中の一部を除外するのがかなり大変だったりするので、やめといた方がよさそう・・・

一応やり方書いておきますが、こんなギャグみたいな.gitignore書いて、

.gitignore
node_modules/*
!/node_modules/@kintone
/node_modules/@kintone/*
!/node_modules/@kintone/js-sdk/
/node_modules/@kintone/js-sdk/*
!/node_modules/@kintone/js-sdk/packages/
/node_modules/@kintone/js-sdk/packages/*
!/node_modules/@kintone/js-sdk/packages/rest-api-client/
/node_modules/@kintone/js-sdk/packages/rest-api-client/*
!/node_modules/@kintone/js-sdk/packages/rest-api-client/.gitignore
!/node_modules/@kintone/js-sdk/packages/rest-api-client/lib/

さらに、こっちの.gitignoreからlibを消しておく。

node_modules/@kintone/js-sdk/packages/rest-api-client/.gitignore
 node_modules/
-lib/
 esm/
 umd/

まぁ、方法1の方が無難ですなw

おわりに

くれぐれも自己責任でね!
僕も正式リリースまでは、プロダクトコードには使いませんから!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

フロント・バックエンドサービスをコンテナ化してもGitコミット時にLefthookでテストやLint実行

TL;DR

  • フロント・バックエンドサービスをそれぞれコンテナ化、docker-composeで全てのコンテナを管理する
  • monorepoで管理した際に1リポジトリとなるので気軽にGit Hookの処理ができない
  • Lefthookを導入してpre-commit時にすべてのコンテナに対してLintツールを動作させるようにした

サンプルコード

https://github.com/MegaBlackLabel/lefthook-docker-node-go-dev-sample

1リポジトリで開発環境を管理したい

渋川さんの記事

マイクロサービスほどじゃないけどウェブサービスを分割開発したい人向けDocker設定を集めるスレ
https://qiita.com/shibukawa/items/fd49f98736045789ffc3

を読んでフロントエンドとAPIがごっちゃになっている開発環境ヨクナイ!ってことでサービス単位でコンテナ化してvs codeのリモートコンテナ機能を使って開発環境を再構築をしていたらGitとGItHooksの扱いで躓く。

Git Hooksの扱い

1リポジトリでサービスをコンテナ化してmonorepoを構築した際に.gitはルートディレクトリのみに存在する。
何が起こるかというと、フロントエンド開発時に「Husky+lint-stagedでコミット前にeslintやprettierを実行してコミット前にソースをチェックする」ができなくなります。これは治安が悪くなるってことで調査を進めた結果、試してみたのがLefthookです。

Lefthookを使ってみる

Lefthookとは?ということで公式の説明を引用

The fastest polyglot Git hooks manager out there

Fast and powerful Git hooks manager for Node.js, Ruby or any other type of projects.

  • Fast. It is written in Go. Can run commands in parallel.
  • Powerful. With a few lines in the config you can check only the changed files on pre-push hook.
  • Simple. It is single dependency-free binary which can work in any environment.
  • GO製。コマンドを並列実行できる
  • かんたんな設定ファイルでpre-pushのhookが使えるようになる
  • (GOによる)シングルバイナリなので、どのOSでも実行可能

今回は以下のことを実装しました。

  • 起動時にdocker-composeでインスタンス起動
  • 起動したインスタンスに対してコマンドを実施
  • 更新対象のファイルの拡張子をgrepして対象の拡張子がstageにあるときのみ実行する

※、余談ですが日本語での紹介記事は2つのみ。1つは公式の翻訳ともう一つはRubyでのHusky置き換え記事です。

Lefthook: 多機能GItフックマネージャ
https://techracho.bpsinc.jp/hachi8833/2019_10_16/79052

Git HooksマネージャーのLefthookを試してHusky(+lint-staged)と比較した結果、乗りかえました
https://blog.solunita.net/posts/change-lefthook-instead-of-lintstaged-with-husky/

Lefthookインストール

Lefthookインストールですが、公式サイトのInstallationか、リリースページから直接ダウンロードします。自分はWindows環境なのでプロジェクト内にlefthook.exeをそのまま置いて使っています。
インストール後に対象のリポジトリで以下のコマンドを実行

lefthook install #Windowsで直下に置いている場合は lefthook.exe install

インストールが完了するとリポジトリのルートに「lefthook.yml」が作成されますので、こちらに設定を書きます。

Lefthook設定ファイル解説

lefthook.yml
# EXAMPLE USAGE
# Refer for explanation to following link:
# https://github.com/Arkweid/lefthook/blob/master/docs/full_guide.md
#
# pre-push:
#   commands:
#     packages-audit:
#       tags: frontend security
#       run: yarn audit
#     gems-audit:
#       tags: backend security
#       run: bundle audit
#
# pre-commit:
#   parallel: true
#   commands:
#     eslint:
#       glob: "*.{js,ts}"
#       run: yarn eslint {staged_files}
#     rubocop:
#       tags: backend style
#       glob: "*.rb"
#       exclude: "application.rb|routes.rb"
#       run: bundle exec rubocop --force-exclusion {all_files}
#     govet:
#       tags: backend style
#       files: git ls-files -m
#       glob: "*.go"
#       run: go vet {files}
#   scripts:
#     "hello.js":
#       runner: node
#     "any.go":
#       runner: go run

pre-commit:
    piped: true
    commands:
        1_docker-compose:
            root: .
            run: docker-compose up -d
        2_eslint:
            root: "containers/frontend/"
            glob: "*.{js,jsx,ts}"
            run: docker exec -it frontend-container yarn eslint-check
        3_frontend-test:
            root: "containers/frontend/"
            glob: "*.{js,jsx,ts}"
            run: docker exec -it frontend-container yarn test
        4_api-test:
            root: "containers/api/"
            run: docker exec -it api-container go test

サンプルとインデントの数が違うのはご愛嬌。今回使っている処理は以下の通り。

  • pre-commit: コミット実施前に実行してほしい処理
  • piped:commandsを名前順に実施する。そのため頭文字に数字をつける
  • commands:実行するコマンド
  • root:どの階層でコマンドを実施するかを記載
  • glob:stagedのファイルのうち、コマンド実行対象とするファイルを選別する
  • run:実行するコマンド

コマンドの内容ですが以下の処理を実施しています。

  • docker-composeでコンテナを起動
  • docker execを使用してフロントエンドコンテナでeslint+Prettierを実施
  • docker execを使用してフロントエンドコンテナでテストを実施
  • docker execを使用してAPIコンテナでテストを実施

フォルダ・ファイル構成

以下の想定でファイル構成を行っています。
- フロントエンドとAPIサーバをそれぞれコンテナ化して管理
- docker-composeでコンテナを一元管理
- フロントエンドではeslint+Prettierでのソース整形とテストを実施
- APIサーバではテストを実施
- それぞれ正常に実行時のみコミットを実施する

ファイル構成
lefthook-docker-node-go-dev-sample
│  .gitignore
│  docker-compose.yml
│  lefthook.exe
│  lefthook.yml
│  LICENSE
│  README.md
│
└─containers
    ├─api
    │      docker-entrypoint.sh
    │      Dockerfile
    │      go.mod
    │      go.sum
    │      main.go
    │      main_test.go
    │
    └─frontend
        │  .eslintrc.json
        │  docker-entrypoint.sh
        │  Dockerfile
        │  package.json
        │  README.md
        │  yarn.lock
        │
        ├─node_modules
        ├─public
        │      favicon.ico
        │      index.html
        │      logo192.png
        │      logo512.png
        │      manifest.json
        │      robots.txt
        │
        └─src
                App.css
                App.js
                App.test.js
                index.css
                index.js
                logo.svg
                serviceWorker.js
                setupTests.js

Lefthookでpre-commit時にコンテナに対してコマンド実行

pre-commitをrunしてみる。

実行結果
.\lefthook.exe run pre-commit
RUNNING HOOKS GROUP: pre-commit

  EXECUTE > 1_docker-compose
api-container is up-to-date
frontend-container is up-to-date

  EXECUTE > 2_eslint
yarn run v1.22.4
$ eslint --print-config .eslintrc.json | eslint-config-prettier-check
No rules that are unnecessary or conflict with Prettier were found.
Done in 0.69s.

  EXECUTE > 3_frontend-test
yarn run v1.22.4
$ CI=true react-scripts test
PASS src/App.test.js
  ✓ renders learn react link (39ms)

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        2.081s
Ran all test suites.
Done in 3.23s.

  EXECUTE > 4_api-test
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:   export GIN_MODE=release
 - using code:  gin.SetMode(gin.ReleaseMode)

[GIN-debug] GET    /ping                     --> github.com/MegaBlackLabel/lefthook-docker-node-go-dev-sample.setupRouter.func1 (3 handlers)
[GIN] 2020/03/15 - 03:43:28 | 200 |      44.742µs |                 | GET      /ping
PASS
ok      github.com/MegaBlackLabel/lefthook-docker-node-go-dev-sample    0.014s

SUMMARY: (done in 7.78 seconds)
✔️  1_docker-compose
✔️  2_eslint
✔️  3_frontend-test
✔️  4_api-test

コマンドが順番に実行されそれぞれの実行結果が表示。最後にサマリーとしてOK・NGが出力されます。

まとめ

  • サービス単位でコンテナ化して開発するのは便利だね。でもGit Hooksの処理ができない
  • Lefthook使えばできるよ。シングルバイナリだから導入もかんたんだよ
  • コンテナ化してもGit Hooksが使えるので複数の開発者がいても治安が維持できそう

以上

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

管理者権限のないWindowsでvue開発(サンプル付き)

コロナ禍で、在宅で、与えられたリモート環境には管理者権限がなくて、でも開発はやらないと。。
なんて状態でもvue開発するための環境構築手順です

ついでに vue の動作確認サンプルも載せときます

手順

1.node環境の構築
2.vue-cli のインストール
3.vue プロジェクトの作成
4.vue 動作確認用サンプル

1.node環境の構築

公式サイトから ZIP版をダウンロードしてきて、展開
環境変数を設定します
ファイルを展開して置くだけなので管理者権限は不要です

1.1. nodeをダウンロード

https://nodejs.org/ja/download/
Windows Binary の ZIPファイルをダウンロードです

01.png

1.2. nodeをインストールするフォルダの準備

ユーザ(自分)のフォルダにインストール用フォルダを準備

コマンドプロンプトを開いてフォルダを作成しときます

c:\Users\ユーザ名> mkdir App

1.3. nodeをインストール(ファイル置くだけ)

まず落としてきたZIPを展開
 node-v12.16.1-win-x64.zip
 ※ Windows標準の「すべて展開」を使った前提で記述してます

展開してできたフォルダを準備したAppフォルダに移動

C:\Users\ユーザ名 > move  Downloads\node-v12.16.1-win-x64\node-v12.16.1-win-x64  App\
        1 個のディレクトリを移動しました。

移動したフォルダ名を今後のためにリネームしときます
「node-v12.16.1-win-x64」->「node」

C:\Users\ユーザ名> cd App

C:\Users\ユーザ名\App> rename node-v12.16.1-win-x64 node

1.4. PATHの設定

管理者権限がないのでコントロールパネルから環境変数PATHを設定します

1.4.1. コントロールパネル -> ユーザー アカウント を開き

02.png

1.4.2. ユーザー アカウント を開き

03.png

1.4.3. 環境変数の変更 を開く

04.png

1.4.4. 環境変数 PATH に nodeを追加する

開いた「環境変数」ウィンドウで上部のユーザの環境変数から Path を選択
(下部のシステム環境変数は権限がなくて変更できないと思います)
「編集」ボタンを押して、開いた「環境変数名の編集」ウィンドウで「新規」でnodeをインストールしたフォルダを追加します
[ C:\Users\ユーザ名\App\node ]

1.5. nodeのインストール確認

新たにコマンドプロンプトを開いてバージョンを確認してみます

C:\Users\ユーザ名> node --version
v12.16.1

C:\Users\ユーザ名> npm --version
6.13.4

どうでしょう
ちゃんとバージョン出たら、インストール成功です
※ 上記バージョンは 2020/3/16 時点の最新だと思います

2.vue-cli のインストール

npm でサクッとインストール

コマンドプロンプトで以下を実行

C:\Users\ユーザ名> npm install @vue/cli
・・・・
+ @vue/cli@4.2.3
added 1115 packages from 654 contributors and audited 16661 packages in 590.218s

23 packages are looking for funding
  run `npm fund` for details

4.2.3 がインストールされました

3.vue プロジェクトの作成

コマンドプロンプトで以下を実行

> vue create test
・・・
 $ cd test
 $ npm run serve

無事にインストールされた模様

インストールパッケージを確認

> cd test

test> type package.json
{
  "name": "test",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint"
  },
  "dependencies": {
    "core-js": "^3.6.4",
    "vue": "^2.6.11"
  },
  "devDependencies": {
    "@vue/cli-plugin-babel": "~4.2.0",
    "@vue/cli-plugin-eslint": "~4.2.0",
    "@vue/cli-service": "~4.2.0",
    "babel-eslint": "^10.0.3",
    "eslint": "^6.7.2",
    "eslint-plugin-vue": "^6.1.2",
    "vue-template-compiler": "^2.6.11"
  },
  "eslintConfig": {
    "root": true,
    "env": {
      "node": true
    },
    "extends": [
      "plugin:vue/essential",
      "eslint:recommended"
    ],
    "parserOptions": {
      "parser": "babel-eslint"
    },
    "rules": {}
  },
  "browserslist": [
    "> 1%",
    "last 2 versions"
  ]
}

vue 2.6.11 がインストールされました

4.vue 動作確認用サンプル

そのまま実行してもつまらない?ので
動作確認用のサンプルをば

src/App.vue
<template>
  <div>
    {{ messages }}
    <div>
      <ol>
        <li v-for="(it, idx) in items" :key="it.id">
          {{ it }}
          <button v-on:click="del_item( idx )"> x </button>
        </li>
      </ol>
      <input v-model="item" />
      <button v-on:click="add_item()">Add Item</button>
    </div>
  </div>
</template>

<script>
export default {
  data () {
    return {
      messages: 'Hello World!',
      items: [ 'aaa', 'bbb', 'ccc', ],
      item: 'Hello Vue.js!',
    }
  },
  methods: {
    add_item: function () { this.items.push( this.item ); this.item = ''; },
    del_item: function ( _idx ) { this.items.splice( _idx, 1 ) }
  }
}
</script>

こちらを参考とさせていただきました。よいサンプルをありがとうございます。
 https://qiita.com/yamazaki3104/items/c793d77a19f104c2a63e
ちょこっと Vue-cli 用? に変更してます

コマンドプロンプトで以下を実行することで動作確認できます
管理者権限なくてもポート開けるのね

> npm run serve
・・・・
 DONE  Compiled successfully in 11754ms 

  App running at:
  - Local:   http://localhost:8080/
  - Network: http://10.20.30.40:8080/

  Note that the development build is not optimized.
  To create a production build, run npm run build.

以上
管理者権限のない Windows で Vue 開発する手順でした

ちなみに Visual Studio Code も管理者権限なくインストール可能です
こちら https://code.visualstudio.com/download の 「User Installer」をダウンロードして実行するだけです
管理者権限なくても普通にインストールできちゃいました

これで開発はかどります

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

anyenv 経由の nodenv 経由で Node.js をインストールする

背景

Node.jsをインストールする方法がたくさんあって迷う問題。

  • 公式のインストーラ を使う場合
  • homebrew 経由でインストールする場合
  • nvm 経由でインストールする場合
  • nodebrew 経由でインストールする場合
  • ndenv 経由でインストールする場合
  • nodenv 経由でインストールする場合
  • anyenv 経由でインストールする場合 (当記事)

いや多すぎんだろ!!?

公式のインストーラ & homebrew 経由でインストールした時の問題

  • 複数のNodeバージョンをインストールできない。

複数のプロジェクトでNodeのバージョンが異なってたら切り替えがめんどくさい?

nodebrew & nvm 経由でインストールした時の問題

複数のNodeバージョンをインストールできるようになりました。

  • nodebrew use <version>, nvm use <version> でバージョン切り替えがめんどくさい

再インストールする必要はないが、コマンドを打つのでさえめんどくさい?

ndenv 経由でインストールした時の問題

.node-version ファイルが配置されていれば自動でバージョン切り替えできる?

  • パッケージが非推奨になった?
  • nodenv がオススメだよと教えてもらう

nodenv 経由でインストールした時の問題

デフォルトパッケージプラグインもあって nodenv めがっさ便利☺️

  • nodenv, goenv, phpenv, pyenv, rbenv... ***env何個あるねん!
  • ~/.bash_profile の初期設定がかさばる問題
    • 複数の **env ツールを入れない場合は良いと思う

anyenv 経由でインストールした時

?

前提条件

  • homebrew がインストールされていること

既にNode.jsが入っている人

こちらの記事を参考にアンインストールしてクリーンな状態にしてください。

anyenv をインストールする

$ brew install anyenv
$ anyenv init
$ echo 'eval "$(anyenv init -)"' >> ~/.bash_profile
$ exec $SHELL -l

$ anyenv -v
anyenv 1.1.1

anyenv-update プラグイン をインストールする

$ mkdir -p $(anyenv root)/plugins
$ git clone https://github.com/znz/anyenv-update.git $(anyenv root)/plugins/anyenv-update

使い方

$ anyenv update

anyenv, anyenv のプラグイン, **env, **env プラグインをまとめてアップデートしてくれます。

  • nodenv install -l 等でインストールしたいバージョンが見つからなかった時に実行してください。

anyenv-git プラグイン をインストールする

$ mkdir -p $(anyenv root)/plugins
$ git clone https://github.com/znz/anyenv-git.git $(anyenv root)/plugins/anyenv-git

使い方

$ anyenv git pull
$ anyenv git gc
$ anyenv git remote -v
$ anyenv git status

**env, **env のプラグインの git 操作をまとめて実行できます。

anyenv でインストール可能なenv系一覧

$ anyenv install -l
  Renv
  crenv
  denv
  erlenv
  exenv
  goenv
  hsenv
  jenv
  luaenv
  nodenv
  phpenv
  plenv
  pyenv
  rbenv
  sbtenv
  scalaenv
  swiftenv
  tfenv

# anyenv でインストールしたenvツールの一覧
$ anyenv versions

anyenv 経由で nodenv をインストールする

$ anyenv install nodenv
$ exec $SHELL -l

nodenv-default-packages プラグイン

$ touch $(nodenv root)/default-packages

使い方

$ vim $(nodenv root)/default-packages
yarn
typescript

Node.js をインストールした際に default-packages に記載したパッケージをグローバルインストールしてくれる。

nodenv 経由で Node.js をインストールする

$ nodenv install -l

$ nodenv install 13.10.1
$ nodenv global 13.10.1

$ exec $SHELL -l
$ node -v
v13.10.1
$ npm -v
6.13.7

特定のディレクトリだけNodeバージョンを切り替える

$ nodenv install 10.13.0
$ mkdir testdir
$ cd testdir
$ nodenv local 10.13.0

$ node -v
v10.13.0
$ npm -v
6.4.1

nodenv local x.x.x を実行すると .node-version ファイルが作成される。

$ cat .node-version
10.13.0

プロジェクトルートに配置しておけば、自動的にバージョンを切り替えてくれる。

nodenv-default-packages 後からパッケージをグローバルインストール

# 指定したバージョンにパッケージをグローバルインストールする
$ nodenv default-packages install 10.13.0

# すべてのバージョンにパッケージをグローバルインストールする
$ nodenv default-packages install --all
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Cloud9のNode.jsのバージョンを上げる

はじめに

Cloud9で使用しているデフォルトのOSであるAmazon Linuxでは、Node.jsのバージョンがv10.19.0のため、2020/03/16時点で最新のv12.16.1にバージョンアップする。

前提条件

  • AWSにサインアップしていること
  • Cloud9のプロジェクトを作成していること
    • 本手順ではAmazon Linuxを使用している
cat /etc/system-release
Amazon Linux AMI release 2018.03

手順

以下のコマンドを実行します。

nvm install v12.16.1
nvm alias default v12.16.1
npm update -g npm
npm i -g npm
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む