web-dev-qa-db-ja.com

Lodash-'_'はUMDグローバルを参照し、lodash.jsはモジュールエラーではありません

私が何もせずに型定義を追加すると、jqueryで機能しますが、lodashは

'_'はUMDグローバルを参照しますが、現在のファイルはモジュールです。代わりにインポートを追加することを検討してください。

インポート呼び出しの任意の組み合わせでlodashをインポートしようとすると、

lodash.jsはモジュールではありません

こちら に質問してヘルプを取得しようとしましたが、 別の回答があったためクローズされました Angular(Angular 2)の場合。私は本当に本当の答えが必要なので、自分の解決策を再投稿します。誰かが最終的にこの問題を理解してくれることを期待しています。

この場合、私は:

  1. Angularのようなフレームワークを使用しない
  2. TypeScriptの使用
  3. Requirejsを使用してモジュールをインポートする
  4. Visual Studioの使用
  5. MVC5の使用
8
AndrewBenjamin

問題を修正するために、グローバルタイピング定義ファイル(〜\ src\typings.d.ts)に次のコードを追加しました。 Angular CLI 1.7を使用しています

// lodash global typing - begin
declare namespace _ {
}
// lodash global typing - end
9
Feng

〜\ src\typings.d.tsに追加しました:

declare const _;

わたしにはできる。 参照

4
Max

私が使う import * as _ from 'lodash'; lodashをインストールした後の作業ファイル。

2
Nizam Khan

他の答えはどれもうまくいきませんでした。ここで私はそれを解決した方法です。

このメソッドを使用すると、グローバルインクルードからlodashをロードできます

また、lodashをWebpackバンドルに組み込まなくても、非常に重要なタイプのヒントが得られます。

Lodashは、インポートする必要なく、すべてのtsファイルでグローバルにアクセスできるようになります

これが私の設定です。

[〜#〜] html [〜#〜]

<head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js" integrity="sha256-VeNaFBVDhoX3H+gJ37DpT/nTuZTdjYro9yBruHjVmoQ=" crossorigin="anonymous"></script>
</head>

[〜#〜] npm [〜#〜]

npm i @types/lodash lodash --save-dev

Webpack

externals: {
    _: 'lodash'
}

global.d.ts

import _ from 'lodash';
declare global {
    const _: typeof _;
}

tsconfig.json

"types": [
    "lodash"
],

entry.ts

console.log(_.VERSION)

この方法は、バンドルのコンパイルにかかる時間を短縮します。ビルドサイズを小さくし、各ビルド後にクライアントへのダウンロードサイズを小さくして、クライアントが以前のビルド、他のページ、または他のサイトのメモリに既に持っている可能性があるCDNからキャッシュされたライブラリを使用できるようにします。

0
Dieter Gribnitz

'_'はUMDグローバルを参照しますが、現在のファイルはモジュールです。代わりにインポートを追加することを検討してください。

これはタイプ定義が原因です。 @ types/lodashファイルに移動して、次の行を削除します。

export = _;
export as namespace _;

これでエラーが解決します。

***編集****

上記のエクスポートステートメントを削除すると、たとえば次のように、タイプ定義ファイルにグローバル宣言がある場合、別のエラーが発生します。

declare global { }

これを解決するには、プロパティをグローバル宣言からそれらを参照するインターフェイスに移動するか、プロパティを完全に削除して、参照のタイプを汎用的なものに変更します。どのソリューションがより良い最終的なコンパイルを行うかはわかりませんが、前者はアプリケーションにIE11までさかのぼって問題を引き起こしていません。

0
AndrewBenjamin