LoginSignup
0
0

More than 3 years have passed since last update.

webpackでビルドしたscriptに、HTMLから値を渡すアレ

Posted at

LaravelやRailsみたいな環境で、バックエンドからフロントエンドに値を渡したいときのアレです。i18n対応とか。方法忘れて2時間くらい溶けたのでメモ。

今回の用途

LaravelのViewから @lang('hoge.fuga') ヘルパ関数で、i18n済みメッセージ文字列を渡したい

今回は省略しますが、セキュリティ対策は各環境でお願いします。

Laravel View

コツってほどでもないですが mix() は一番最後。

dokoka.blade.php
... 中略

<script>
  var __SYS_GLOBALS_ = {
    HOGE_FUGA_MESSAGE: "@lang('hoge.fuga')"
  };
</script>

... 中略
/
<script src="{{ mix('/js/app.js') }}"></script>
</body>
</html>

Typescript側

モジュールとして、どこか新規ファイルに下記のように書いておけば良いです。
ただしインポートするとエラーになります。インポートはしない。不思議ですよね。

__SYS_GLOBALS__.ts
export {};
declare global {
  const __SYS_GLOBALS__: any;
}

インポートするとTS内で再定義されてしまうのでしょうか、その場合確かに(TS内には)実体はないのでエラーになりそう。

TS2304: Cannot find name '__SYS_GLOBALS__'.

あとはお好みで定数を使います。

nanika.ts
alert(__SYS_GLOBALS__.LOADING_NOW_MESSAGE);

まとめ

こんな設計はいけません。わかってはいるのですが、そういうときもあるのです。[終]

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0