Golang フレームワークでStaticファイルをemmbeddingしてをnpmライブラリを使いたい。例えばhttp-status-codeなど。
ハマったのでメモします。
解決策
具体的には、サーバーサイドで
main.go
r.StaticFS("/node_modules", http.Dir("static/node_modules"))
クライアントサイドで
main.ts
import { StatusCodes } from "../node_modules/http-status-codes/build/es/status-codes.js"
ライブラリはあらかじめnpm
使ってインストールしておく必要がある。
$ npm install -D http-status-codes
ポイントはnode_module/{ライブラリ名}/build/es/{モジュール名}.js
を指定すること。
補足: ディレクトリ構成
/
├── main.go
├── static
├── dist
│ ├── common.d.ts
│ ├── common.js
│ ├── common.js.map
│ ├── ...ビルドしたjs達
├── node_modules
│ ├── @popperjs
│ ├── @types
│ ├── bootstrap
│ └── http-status-codes
├── src
│ ├── common.ts <--- この辺でimportする
│ ├── datalist.ts
│ ├── ソースとなるts達
├── style.css
やってだめだったこと
-
import { StatusCodes } from "../node_module/http-status-codes/build/cjs/status-codes.js"
: common js (cjs) は import-exportをサポートしていません。 -
import { StatusCodes } from "../node_module/http-status-codes"
:npx tsc
のビルドは通るけど、どのjsからStatusCodesをインポートすればいいか探せない?ため404エラーになる。(nodeモジュールから勝手に探してくれないの...?) -
import { STATUS_CODE } from "https://deno.land/std@0.217.0/http/status.ts";
: denoを使ってフォーマット・テストしているのでつい…。ブラウザ上のJSには使えません。