2

webpack および npm モジュールを使用して Web サイトのコードを作成していますが、次の問題に遭遇しました。

私のコードは jQuery 3.1.1 を使用し、いくつかのプラグインを追加します。また、jQuery <= 2.2.4 にサブ依存関係を持つ依存関係を使用しています。問題は、モジュールが異なる jquery バージョンを使用しているため、サブ依存関係のオブジェクトが私の jQuery プラグインについて明らかに知らないことです。

すべての依存関係 (最上位およびネスト) を強制的に 1 つのバージョンの jQuery を使用するにはどうすればよいですか? したがって、require("jquery")常に jQuery 3.1.1 に解決されます。

依存関係のバージョンをオーバーライドするために npm Shrinkwrap を使用しようとしましたが、うまくいかないようです。これは私の変更されたシュリンクラップ ファイルです。

{
  "name": "example",
  "version": "0.1.0",
  "dependencies": {
    "can": {
      "version": "2.3.27",
      "from": "can@>=2.3.23 <3.0.0",
      "resolved": "https://registry.npmjs.org/can/-/can-2.3.27.tgz",
      "dependencies": {
        "jquery": {
          "version": "3.1.1",
          "from": "^3.1.1"
        }
      }
    }
  }
}

ただし、モジュールの依存関係は依然として jQuery 2.2.4 であり、npm install出力されますnpm ERR! invalid: jquery@3.1.1 /path/.../can/node_modules/jquery

npm の代わりに webpack を使用して問題を解決するソリューションも受け入れられます。

4

1 に答える 1

5

webpackエイリアスを使用して自分で解決策を見つけました。

resolve: {
    root: __dirname,
    alias: {
        "jquery": "node_modules/jquery/src/jquery",
    }
}

これで、使用するすべてのモジュールrequire('jquery')は、モジュールの package.json で指定されたバージョンに関係なく、エイリアス パスの下にある jquery モジュールをロードします。

このソリューションにはwebpackが必要であり、npmのみのソリューションがあれば興味があるので、今のところ質問を開いたままにしています。

于 2016-12-01T09:43:28.533 に答える