typescript - jquery.inputmask をインポートする適切な方法は何ですか?
私はwebpackとTypeScriptでjquery.inputmaskをインポートするのに問題があります。Question: build this with webpack/es6 #1115 でいくつかの議論があります:
これが私が jqlite でセットアップした方法です
アプリに次のようにインポートしてください:
import InputMask from 'inputmask';その名前でモジュールを利用可能にするには、それをエイリアスして依存ライブラリを作成する必要があります
webpack 設定(jqlite 依存ライブラリを使用、代わりに jquery を使う場合は差し替えてください):
{ // ... your config + resolve: { alias: { 'inputmask.dependencyLib': path.join(__dirname, 'node_modules/jquery.inputmask/extra/dependencyLibs/inputmask.dependencyLib.jqlite.js'), 'inputmask': path.join(__dirname, 'node_modules/jquery.inputmask/dist/inputmask/inputmask.js') } } }
依存関係としてjqLiteの代わりにjQueryを使った、同様のwebpack設定があります:
alias: {
"inputmask.dependencyLib": path.join(__dirname, '../node_modules/jquery.inputmask/dist/inputmask/inputmask.dependencyLib.jquery.js'),
"inputmask": path.join(__dirname, '../node_modules/jquery.inputmask/dist/inputmask/inputmask.js')
}
import InputMask from "inputmask"; とすると、TypeScript コンパイラがエラーを投げます:
エラー TS2307: モジュール 'inputmask' を見つけることができません。
<code>import "inputmask";</code> を使用すると、<code>$(element).inputmask(mask);</code> を呼び出した時にランタイムエラーが発生します:
TypeError: $ (...).inputmask は関数ではありません
設定に問題があるのか、それともライブラリ自体の問題なのですか?
回答 #1
週末に誰かがGitHubで似たような質問をして、解決策も投稿されました。
コメント付きの全文はここで見つけることができます。さらに2つの別名が必要です:
"jquery": path.join(__dirname, '../node_modules/jquery/dist/jquery.js'),
"inputmask.dependencyLib": path.join(__dirname, '../node_modules/jquery.inputmask/dist/inputmask/inputmask.dependencyLib.jquery.js'),
"inputmask": path.join(__dirname, '../node_modules/jquery.inputmask/dist/inputmask/inputmask.js'),
"jquery.inputmask": path.join(__dirname, '../node_modules/jquery.inputmask/dist/inputmask/jquery.inputmask.js')
それからライブラリをインポートするには、import "jquery.inputmask"; を使用します。
回答 #2
念のため、より新しいバージョンの inputmask/jquery で動作させたい場合のために。inputmask にはいくつか変更があります。次のコードで動作させることができました:
package.json:
"webpack": "^5.1.3",
"inputmask": "^5.0.5",
"jquery": "^3.5.1",
webpack model.exports:
resolve: {
alias: {
'jquery': _path('../node_modules/jquery/dist/jquery'),
'inputmask': _path('../node_modules/inputmask/dist/jquery.inputmask'),
},
},
ES6 インポート:
import 'inputmask';
import $ from 'jquery';
