-
Notifications
You must be signed in to change notification settings - Fork 0
MS_JavaScriptServices
「JavaScript Services ワンセットは意味不明だけど、
Node Servicesダケなら使うシーンはあるかもしれない。」
的な事を色々と調査しながら考えたが、Obsoleting(廃止)らしい。
補足(廃止は完了している/最新化): 原文が「廃止らしい」と
記録している時点から先の経緯を補っておく。
時期 状況 2017 Microsoft.AspNetCore.SpaServices/NodeServices登場2019-08 廃止(Obsolete)が正式に告知(原文が参照する Issue #12890) .NET Core 3.0 [Obsolete]属性が付与され、警告が出るように.NET 5 パッケージの提供終了 現在 後継として Microsoft.AspNetCore.SpaServices.Extensionsが\一部機能のみ提供(これも .NET 8 以降は縮小方向) つまり、本ページの技術は現在は使えない。
「なぜ廃止されたのか」を理解しておくことに意義がある。
以下を実現すると言われてる。
-
Invoking arbitrary NPM packages at runtime from .NET code
.NET コードからランタイムに任意の NPM パッケージを呼び出す -
Server-side prerendering of SPA components
SPA コンポーネントのサーバーサイドプリレンダリング -
Webpack dev middleware
Webpack 開発ミドルウェア -
Hot module replacement (HMR)
ホットモジュールリプレースメント(HMR) -
Server-side and client-side routing integration
サーバーサイドおよびクライアントサイドのルーティングの統合 -
Server-side and client-side validation integration
サーバーサイドとクライアントサイドの検証の統合 -
"Lazy loading" for Knockout apps
Knockout アプリのレイジーローディング
補足(廃止の理由): 一覧を眺めると、
**「.NET プロセスから Node.js プロセスを起動して面倒を見る」**という
構造に無理があったことが見えてくる。【JavaScript Services の構造】 ASP.NET Core プロセス └─ Node.js プロセスを子として起動 └─ webpack-dev-server / SSR レンダラーを実行 ← プロセス間通信で結果を受け取る 【問題】 ・Node.js のバージョン管理が .NET 側の関心事になる ・フロントエンドのツールチェーンの進化が速すぎて追随できない (webpack → Rollup / Vite / esbuild / SWC …) ・デバッグが困難(どちら側で落ちたか分かりにくい) ・本番で Node.js プロセスを抱えることになる(SSR) ・そもそもフロントエンド側に、より良い専用ツールがある各機能の現在の代替:
当時の機能 現在の代替 Webpack dev middleware / HMR Vite / webpack-dev-server を別プロセスで(プロキシで繋ぐ) サーバーサイド プリレンダリング(SSR) Next.js / Nuxt / Angular Universal(Node.js 側で完結) ルーティング統合 MapFallbackToFile("index.html")検証の統合 各々で実装(共有するなら OpenAPI からコード生成) .NET から npm パッケージを呼ぶ やらない(必要なら別サービスに切り出す) Knockout の遅延読み込み Knockout 自体が現役ではない **結論は ASP.NET Core SPAテンプレート の
原文の主張と同じで、「フロントとバックを分離する」**である。
Microsoft も同じ結論に至って本機能を畳んだ、と読める。
以下の2つのコンポーネントから構成されているもよう。
.NET から Node.js コードを呼び出す。
-
SPA を構築する場合に一般的に
便利なインフラストラクチャを提供する。 -
内部的に、Node Servicesを使用している模様。
補足(「Node Services だけなら使えるかも」への回答): 原文の
この見立ては、当時としては妥当だったが、現在は
NodeServicesも廃止済みである。「.NET から JavaScript を実行したい」という要求に対する
現在の選択肢を挙げておく。
手段 内容 別サービスに切り出す Node.js の Web API を立て、HTTP で呼ぶ(最も素直) Jint 純 C# 製の JavaScript インタープリター。Node.js 不要 ClearScript V8 / ChakraCore を埋め込む(ネイティブ依存あり) Microsoft.JSInteropBlazor 内で JS を呼ぶ(用途が異なる) 自前で Process起動node script.jsを叩く(NodeServices が内部でやっていたこと)サーバ側で JavaScript を実行する必要が本当にあるかを
先に検討するのが妥当である。
多くの場合、その処理はフロント側かバッチ側に置ける。
-
aspnet/JavaScriptServices: Microsoft ASP.NET Core JavaScript Services
https://github.com/aspnet/JavaScriptServices -
MicrosoftがJavaScript Webアプリ開発を容易にする新ツールを提供
https://www.infoq.com/jp/news/2017/03/dotnet-new-javascript-spa -
ASP.NET Core で JavaScript サービスを使用して
シングル ページ アプリケーションを作成する
https://learn.microsoft.com/ja-jp/aspnet/core/client-side/spa-services- [Announcement] Obsoleting Microsoft.AspNetCore.SpaServices
and Microsoft.AspNetCore.NodeServices · Issue #12890 · dotnet/aspnetcore
https://github.com/dotnet/AspNetCore/issues/12890
- [Announcement] Obsoleting Microsoft.AspNetCore.SpaServices
- ASP.NET Core での SPA の開発
https://learn.microsoft.com/ja-jp/aspnet/core/client-side/spa/intro
Tags: 移行, プログラミング, .NET開発, .NET Core, ASP.NET, ASP.NET MVC
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。