tag:crieit.net,2005:https://crieit.net/tags/Nodejs/feed 「Nodejs」の記事 - Crieit Crieitでタグ「Nodejs」に投稿された最近の記事 2021-09-08T23:30:59+09:00 https://crieit.net/tags/Nodejs/feed tag:crieit.net,2005:PublicArticle/17640 2021-09-08T23:30:59+09:00 2021-09-08T23:30:59+09:00 https://crieit.net/posts/refer-params-package-json-in-script-20210908 package.json の情報をスクリプト内で参照したい <p>package.json の情報をスクリプト内で参照したくなったのでその方法をメモ。</p> <h2 id="方法"><a href="#%E6%96%B9%E6%B3%95">方法</a></h2> <pre><code class="js">const packageJson = require('./package.json'); console.log(packageJson.version); // 0.0.1 console.log(packageJson.dependencies); // { bootstrap: '^5.1.0' } </code></pre> <p>普通に <code>require</code> で読み込めるようです。</p> <pre><code class="js">const packageJson = require('./package.json'); console.log(packageJson.version); // 0.0.1 console.log(packageJson.devDependencies['browser-sync']); // ^2.27.5 </code></pre> <p>パッケージ名にハイフンがある場合はオブジェクトのキー名を指定する形式で使用パッケージのバージョン情報が取得できますね。</p> <p>思ったよりも簡単にできることが確認できました。</p> <p>ちなみに……</p> <pre><code class="bash">> node -v v16.3.0 > npm -v 7.15.1 </code></pre> <p>実行環境はとあるプロジェクトでこんな感じでした。最新に上げないといけませんがそれはそれとして。</p> <h2 id="参考"><a href="#%E5%8F%82%E8%80%83">参考</a></h2> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/k_bobchin/items/c3e43b944d436d857381">package.jsonのversionをコマンド(ワンライナー)で取り出したい - Qiita</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://dev.to/origamium/package-json-1626">package.jsonの各種要素を読み込みたい! - DEV Community</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://docs.npmjs.com/cli/v7/using-npm/scripts#packagejson-vars">scripts | npm Docs</a> <ul> <li><code>process.env.npm_package_XXXXXXXXXX</code> の形は手元の環境で試したところ <code>undefined</code> になってしまいました……</li> </ul></li> </ul> arm-band tag:crieit.net,2005:PublicArticle/17604 2021-08-17T23:17:25+09:00 2021-08-17T23:17:25+09:00 https://crieit.net/posts/gulp-imagemin-become-pure-esm-package-20210817 gulp-imagemin で Error [ERR_REQUIRE_ESM]: Must use import to load ES Module と怒られる <h2 id="経緯"><a href="#%E7%B5%8C%E7%B7%AF">経緯</a></h2> <p>ある日、 package gardening をして Gulp を走らせたら</p> <blockquote> <p>Error [ERR_REQUIRE_ESM]: Must use import to load ES Module</p> </blockquote> <p>と怒られてしまいました。</p> <pre><code class="bash">$ gulp Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: PATH\TO\PROJECT\DIRECTORY\node_modules\gulp-imagemin\index.js require() of ES modules is not supported. require() of PATH\TO\PROJECT\DIRECTORY\node_modules\gulp-imagemin\index.js from PATH\TO\PROJECT\DIRECTORY\gulp\tasks\imagemin.js is an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which defines all .js files in that package scope as ES modules. Instead rename index.js to end in .cjs, change the requiring code to use import(), or remove "type": "module" from PATH\TO\PROJECT\DIRECTORY\node_modules\gulp-imagemin\package.json. </code></pre> <p>今回は <code>gulp-imagemin</code> のスクリプトの中に起因するようなので、そちらに手を入れるのは避けたいところです。</p> <p>さて、どうしたものか。</p> <h2 id="結論"><a href="#%E7%B5%90%E8%AB%96">結論</a></h2> <p>結論から先にいうと、 <code>gulp-imagemin</code> をダウングレードすることで回避するしかなさそうです。</p> <p>今回は <code>8.0.0</code> から既存の <code>7.1.0</code> にダウングレードします。</p> <h2 id="調査"><a href="#%E8%AA%BF%E6%9F%BB">調査</a></h2> <h3 id="&quot;type&quot;: &quot;module&quot;"><a href="#%26quot%3Btype%26quot%3B%3A+%26quot%3Bmodule%26quot%3B">"type": "module"</a></h3> <ul> <li><a target="_blank" rel="nofollow noopener" href="http://var.blog.jp/archives/80335431.html">Node.js の ESModules</a></li> </ul> <p>検索すると、 <code>package.json</code> にパラメータを追記する方法が出てきます。</p> <pre><code class="json">{ "engines": { "node": ">=16.0.0", "npm": ">=6.14.9" }, "engineStrict": true, "prettier": {}, "type": "module" // 追記 } </code></pre> <p><code>"type": "module"</code> を追記する方法です。</p> <p>しかし、この方法を採用する場合、既存の Gulpタスク 全てを CommonJS (<code>require</code>) から ES Modules (<code>import</code>) に書き換える必要があります。</p> <p>それはそれで既存スクリプトの書き換えが大変なことになってしまうので、この方法は今回は不採用。</p> <h3 id="公式リポジトリを覗く"><a href="#%E5%85%AC%E5%BC%8F%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%82%92%E8%A6%97%E3%81%8F">公式リポジトリを覗く</a></h3> <p>そこで公式リポジトリを覗いてみます。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://github.com/sindresorhus/gulp-imagemin/issues/356">I have a question · Issue #356 · sindresorhus/gulp-imagemin · GitHub</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://github.com/sindresorhus/gulp-imagemin/issues/355">8.0.0 - ESM only? Serious? · Issue #355 · sindresorhus/gulp-imagemin · GitHub</a></li> </ul> <p>早速同じ内容の Issues が散見されます。そして回答では「リリースノートを見よ」とのこと。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://github.com/sindresorhus/gulp-imagemin/releases">Releases · sindresorhus/gulp-imagemin · GitHub</a></li> </ul> <blockquote> <p>This package is now pure ESM. Please <a target="_blank" rel="nofollow noopener" href="https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c">read this</a>.</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/sindresorhus/gulp-imagemin/releases">Releases · sindresorhus/gulp-imagemin · GitHub</a></p> </blockquote> <p>最初からここを見ましょう、という話ではあるのですが。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c">Pure ESM package · GitHub</a></li> </ul> <p>ご覧の通り、「<code>8.0.0</code> からは ES Modules のパッケージになっていますよー」というアナウンス。</p> <p>したがって、先の結論の通り CommonJS を使用したければダウングレードせよ、ということになります。是非もなし。</p> <h2 id="参考"><a href="#%E5%8F%82%E8%80%83">参考</a></h2> <ul> <li><a target="_blank" rel="nofollow noopener" href="http://var.blog.jp/archives/80335431.html">Node.js の ESModules</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://zenn.dev/tomon9086/scraps/3a1d9d3eed4864">ESMで書かれたライブラリをNextで使うと[ERR_REQUIRE_ESM]で落ちる件について</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://github.com/sindresorhus/gulp-imagemin/issues/356">I have a question · Issue #356 · sindresorhus/gulp-imagemin · GitHub</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://github.com/sindresorhus/gulp-imagemin/issues/355">8.0.0 - ESM only? Serious? · Issue #355 · sindresorhus/gulp-imagemin · GitHub</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://github.com/sindresorhus/gulp-imagemin/releases">Releases · sindresorhus/gulp-imagemin · GitHub</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c">Pure ESM package · GitHub</a></li> </ul> arm-band tag:crieit.net,2005:PublicArticle/17580 2021-08-09T17:46:21+09:00 2021-08-09T17:46:51+09:00 https://crieit.net/posts/bye-nodist-hello-volta-20210809 Node.js のバージョン管理として Volta を使う <p>Nodist から脱却する方法第二弾。</p> <h2 id="経緯"><a href="#%E7%B5%8C%E7%B7%AF">経緯</a></h2> <p><a href="https://crieit.net/posts/build-enviroment-node-version-switch-by-docker-20210706">Docker で Node.js のバージョン切替環境を構築する</a>で一度 Docker 環境上に Node.js 環境を作りましたが、メモリ領域の不足で遅かったり Browsersync との連動が面倒だったりしたので、やはり一枚レイヤーを挟まずホスト側でストレートに構築する方法も模索すべきか……と思い至ったので Volta を試すことにしました。</p> <h2 id="Nodist のアンインストール"><a href="#Nodist+%E3%81%AE%E3%82%A2%E3%83%B3%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">Nodist のアンインストール</a></h2> <p>今回はPCに直接インストールする形なのでモロに Nodist のバッティングします。そこで、まずは Nodist をアンインストールします。</p> <h3 id="1. Nodist のアンインストール"><a href="#1.+Nodist+%E3%81%AE%E3%82%A2%E3%83%B3%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">1. Nodist のアンインストール</a></h3> <p>まずはアンインストール。コンパネからでも Nodist のインストールフォルダにある <code>uninstall.exe</code> を実行するのでもどちらでも。</p> <p><a href="https://crieit.now.sh/upload_images/4001730b70c2c2a0220da069b81e7e2f6110eb10f0b73.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/4001730b70c2c2a0220da069b81e7e2f6110eb10f0b73.jpg?mw=700" alt="Nodist の uninstall.exe" /></a></p> <h3 id="2. フォルダの削除"><a href="#2.+%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%81%AE%E5%89%8A%E9%99%A4">2. フォルダの削除</a></h3> <p><a href="https://crieit.now.sh/upload_images/317374d2a921262dbb356bf0b5704a776110eb19bea1e.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/317374d2a921262dbb356bf0b5704a776110eb19bea1e.jpg?mw=700" alt="Nodist の残骸のフォルダやファイル" /></a></p> <p>アンインストールしても Nodist のフォルダやら残骸がインストールフォルダ (デフォルトならば <code>C:\Program Files (x86)\Nodist\</code>) に残るので、これを強制削除。</p> <h3 id="3. .npmrc の削除"><a href="#3.+.npmrc+%E3%81%AE%E5%89%8A%E9%99%A4">3. .npmrc の削除</a></h3> <p>使用ユーザのフォルダ直下に <code>.npmrc</code> (<code>C:\Users\<USERNAME>\.npmrc</code>) が残るのでこれを削除……と言いたいところですが、私の場合は存在していませんでした。</p> <p>そのため、ここはパス。</p> <h3 id="4. npm-cache の削除"><a href="#4.+npm-cache+%E3%81%AE%E5%89%8A%E9%99%A4">4. npm-cache の削除</a></h3> <p><a href="https://crieit.now.sh/upload_images/930f41ed08e28a2b6c613b2cb078b7516110eb22e4ef6.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/930f41ed08e28a2b6c613b2cb078b7516110eb22e4ef6.jpg?mw=700" alt="npm-cache の削除" /></a></p> <p>使用ユーザの<code>AppData\Roaming</code> の下に <code>npm-cache</code> (<code>C:\Users\<USERNAME>\AppData\Roaming\npm-cache</code>) が残るのでこれを削除。</p> <h3 id="5. 環境変数の確認"><a href="#5.+%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0%E3%81%AE%E7%A2%BA%E8%AA%8D">5. 環境変数の確認</a></h3> <p><a href="https://crieit.now.sh/upload_images/d458bc9076579814d02a72128e8c8ff36110eb2c1b3d2.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d458bc9076579814d02a72128e8c8ff36110eb2c1b3d2.jpg?mw=700" alt="環境変数" /></a></p> <p>環境変数に Nodist の Node.js へのパスが残っている場合はこれを削除……と言いたいところですが、私の場合は存在していませんでした。</p> <p>そのため、ここもパス。</p> <h2 id="Volta のインストール"><a href="#Volta+%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">Volta のインストール</a></h2> <p>Nodist を削除したら、 Volta をインストールします。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://github.com/volta-cli/volta/releases">Releases · volta-cli/volta · GitHub</a></li> </ul> <p><a href="https://crieit.now.sh/upload_images/9f40ac9ec460dcb4945615229543b7306110eb3533ae0.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/9f40ac9ec460dcb4945615229543b7306110eb3533ae0.jpg?mw=700" alt="Volta のインストーラ" /></a></p> <p>記事執筆時は <code>1.0.4</code> が最新でした。この <code>msi</code> をダウンロード。後は実行してインストール。</p> <pre><code class="bash">>volta -v 1.0.4 </code></pre> <p>入りました。</p> <pre><code class="bash">>volta install [email protected] success: installed and set [email protected] (with [email protected]) as default 9 >node -v v16.3.0 >npm -v 7.15.1 </code></pre> <p>続いて適当なバージョンの Node.js をインストールします。 npm も入りました。良い感じですね。</p> <pre><code class="bash">>volta install yarn success: installed and set [email protected] as default 0 >yarn -v 1.22.11 </code></pre> <p>yarn も入れます。</p> <p>とあるプロジェクトで、 Node.js のバージョンを14系で固定してみます。</p> <pre><code class="bash">> volta pin node@14 success: pinned [email protected] (with [email protected]) in package.json </code></pre> <p>OK.</p> <pre><code class="json"> "volta": { "node": "14.17.4" } </code></pre> <p><code>package.json</code> に Volta 使用時の Node.js のバージョンが追記されました。これでプロジェクトごとにバージョンを切り替えられるのは良いですね。</p> <h2 id="参考"><a href="#%E5%8F%82%E8%80%83">参考</a></h2> <h3 id="Nodist アンインストール"><a href="#Nodist+%E3%82%A2%E3%83%B3%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">Nodist アンインストール</a></h3> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://zenn.dev/ymasaoka/articles/note-uninstall-nodish-windows">2020 年ではもう使えない Nodist はアンインストールする (Windows)</a></li> </ul> <h3 id="Volta"><a href="#Volta">Volta</a></h3> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://zenn.dev/naoyukik/articles/1b861167479d6adfa32f">Nodeのバージョン管理ツールVOLTA⚡</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://dev.classmethod.jp/articles/node-version-volta/">Node.js のバージョン管理ツール Volta を使ってみる | DevelopersIO</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://zenn.dev/taichifukumoto/articles/how-to-use-volta">Node.jsのバージョン管理にVoltaを推したい</a></li> </ul> arm-band tag:crieit.net,2005:PublicArticle/16448 2020-12-30T20:51:19+09:00 2020-12-30T20:52:17+09:00 https://crieit.net/posts/f05ede37f52343628fe7705f6a531ed7 キャップ野球専用スコアブック入力アプリをリリースした <h1 id="蓋野球スコア入力アプリ「CAP-SCOREBOOK」"><a href="#%E8%93%8B%E9%87%8E%E7%90%83%E3%82%B9%E3%82%B3%E3%82%A2%E5%85%A5%E5%8A%9B%E3%82%A2%E3%83%97%E3%83%AA%E3%80%8CCAP-SCOREBOOK%E3%80%8D">蓋野球スコア入力アプリ「CAP-SCOREBOOK」</a></h1> <p><a target="_blank" rel="nofollow noopener" href="https://cap-scoresheet.netlify.app">https://cap-scoresheet.netlify.app</a></p> <h2 id="操作マニュアル"><a href="#%E6%93%8D%E4%BD%9C%E3%83%9E%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%AB">操作マニュアル</a></h2> <div class="iframe-wrapper"><iframe width="560" height="315" src="https://www.youtube.com/embed/XtF5HmEmwWU" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></div> <h2 id="機能概要"><a href="#%E6%A9%9F%E8%83%BD%E6%A6%82%E8%A6%81">機能概要</a></h2> <ul> <li>非ログイン時(閲覧モード) <ul> <li>試合結果閲覧</li> <li>試合内容閲覧</li> <li>個人成績閲覧</li> <li>チーム成績閲覧</li> <li>リーグ成績閲覧</li> <li>ログイン時(入力モード)</li> <li>チーム新規作成</li> <li>選手新規作成</li> <li>試合新規作成</li> <li>スターティングメンバー設定</li> <li>結果入力 <ul> <li>1球ごと入力</li> <li>1打席ごと入力</li> </ul></li> <li>自責点・勝敗S入力</li> </ul></li> </ul> <h2 id="開発環境"><a href="#%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83">開発環境</a></h2> <ul> <li>NextJS(static export)</li> <li>Netlify</li> <li>検証機: Pixel4a(Android)/12mini(iOS)/PC</li> <li>サーバ側: NodeJS</li> <li>DB: MySQL</li> <li>Docker-compose</li> <li>ReactNative For Web</li> <li>ユーザ認証: firebase</li> </ul> <h2 id="開発の経緯"><a href="#%E9%96%8B%E7%99%BA%E3%81%AE%E7%B5%8C%E7%B7%AF">開発の経緯</a></h2> <p>10/21 蓋世・エスト監督からスコアを共有できるアプリはないか聞かれる<br /> 10/25 1打席ごとの入力ができるWEBアプリの仮実装が終わる<br /> 10/30 スコアの活用方法思い付かずに実装中断<br /> 11/26<br /> <a target="_blank" rel="nofollow noopener" href="https://twitter.com/Yokoppe_cap/status/1331653356872298496">https://twitter.com/Yokoppe_cap/status/1331653356872298496</a><br /> よこっぺさんの一言で中断してたスコアアプリの開発のやる気が復活する。<br /> 11/28 リーグ戦の帰りにkamiさんが「投球分析したいなぁ」と言う話をする。<br /> 11/29〜<br /> ある程度実装が終わっていたアプリに1球ごとのコース分析機能を拡張したアプリに着手。<br /> 当初はReactNativeを使ったandroid/iOSアプリを想定。<br /> 12/1 ネイティブアプリから得意なWEBアプリへの舵の切り直しを宣言。<br /> 12/4 ReactNative For Webの採用を決定。<br /> 12/7 Hirooookiさんから投手視点への切り替えが欲しいとの要望を受けるhttps://twitter.com/gstiltonhs/status/1335606102675783680<br /> 12/11 配球分析機能の実装が完了<br /> 12/14 いらすとやからのデザイン変更<br /> 12/21 テストコードの実装に着手<br /> 12/30 α版リリース</p> <h2 id="今回新たに使った技術"><a href="#%E4%BB%8A%E5%9B%9E%E6%96%B0%E3%81%9F%E3%81%AB%E4%BD%BF%E3%81%A3%E3%81%9F%E6%8A%80%E8%A1%93">今回新たに使った技術</a></h2> <ul> <li>ReactNative For Web</li> </ul> <p>CSSが書きにくいと思って敬遠していたのですが、いざ使ってみるとモバイルに最適化されていて、きちんとスタイルを書けば複雑なUIも実現できたので、食わず嫌いはよくないなと。</p> <h2 id="開発する上で役に立ったこと"><a href="#%E9%96%8B%E7%99%BA%E3%81%99%E3%82%8B%E4%B8%8A%E3%81%A7%E5%BD%B9%E3%81%AB%E7%AB%8B%E3%81%A3%E3%81%9F%E3%81%93%E3%81%A8">開発する上で役に立ったこと</a></h2> <p>やっぱり<a target="_blank" rel="nofollow noopener" href="https://jcbl-score.com">みんなのSCORE</a>の開発経験ですかね。<br /> DB設計的にはCAP-SCOREBOOKの方が1球ずつ記録する分複雑なのですが、<br /> CAP-SCOREBOOKにほとんどDB設計を応用できました。</p> <h1 id="今後の展開(β版へ向けて)"><a href="#%E4%BB%8A%E5%BE%8C%E3%81%AE%E5%B1%95%E9%96%8B%28%CE%B2%E7%89%88%E3%81%B8%E5%90%91%E3%81%91%E3%81%A6%29">今後の展開(β版へ向けて)</a></h1> <ul> <li>共同編集機能</li> <li>スコアシート出力機能(需要があれば)</li> </ul> ckoshien