LoginSignup
6
11

More than 5 years have passed since last update.

webpackでjQueryを別ファイルに分けたい

Posted at

なんで?

1ページですむSingle Page Application ではなく今までやってきたような複数ページにまたがる場合、共通部分を別ファイルに分けておくことでDLサイズを減らします。

例えばjQueryのCDNはこれをサイト間で使いまわすことで、重複をなるべく減らしましょう。ということなんですが、複数のCDNがあってその中に各バージョンがあるので本当にしょっちゅうブラウザキャッシュにヒットするのでしょうか?
サイト内の話であればほぼほぼキャッシュ使うと思いますが。

jQueryCDNを使いたい

jQueryについてトラフィックを別サーバーへ逃すために使いたい場合有効です。
webpackへは「jQueryは出力せず自分で読み込ませる」という設定にして自分でCDNのタグを追加します。そのためjQueryはnpmのバージョン管理から外れます。

設定

webpack.config.babel.js
import path from 'path';
import webpack from 'webpack';

export default {
    entry: {
      app: './js/main.js'
    },
    output: {
        path: path.join(__dirname, 'www/js'),
        filename: 'bundle.js',
    },
    externals: {
        jquery: 'jQuery'
    },

    target: 'web'
}

HTMLには以下のタグを挿入


<script src="//code.jquery.com/jquery-2.2.4.min.js" charset="utf-8"></script>
<script src="js/bundle.js" charset="utf-8"></script>

バージョン管理したjQueryをサイト内で共用する

jquery関連をjqueryというnameでグルーピング。
それをwebpack.optimize.CommonsChunkPluginで設定します。
この方法だとnpmでinstallされたjQueryが出力されるためバージョン管理内です。
minifyされる方はpluginsに追加してください。

設定

webpack.config.babel.js
import path from 'path';
import webpack from 'webpack';

export default {
    entry: {
      jquery: ['jquery'],
      app: './js/main.js'
    },
    output: {
        path: path.join(__dirname, 'www/js'),
        filename: 'bundle.js',
    },

    target: 'web',
    plugins: [
        new webpack.optimize.CommonsChunkPlugin({
            name: "jquery",
            filename: "jquery.js",
            minChunks: Infinity
        }),
    ],
}

HTMLには以下のタグを挿入


<script src="js/jquery.js" charset="utf-8"></script>
<script src="js/bundle.js" charset="utf-8"></script>

6
11
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
6
11