現在jQuery 3.1.4のバージョンをトップページ(ローカルにheadメソッドにて)にCDNで読み込ませています。
index.vue
js
1head: { 2 bodyAttrs: { 3 id: 'overview' 4 }, 5 script: [ 6 { 7 src: 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js' 8 } 9 ] 10 } 11
そして同じやり方で下層ページに1.8.3のバージョンのjQueryをCDNで読み込ませています。
lower/index.vue
js
1head: { 2 bodyAttrs: { 3 id: 'lower' 4 }, 5 script: [ 6 { 7 src: 'https://cdnjs.cloudflare.com/ajax/libs/jquery/1.8.3/jquery.min.js' 8 } 9 ] 10 }
複数のjQueryで書いたものをassetsディレクトリに設置してモジュール化してimportして
ローカルのmountedメソッド内に展開しています。
例)~/assets/useragent.js
js
1/* global $ */ 2export default function () { 3 // User agent 4 var _ua = (function (u) { 5 return { 6 Tablet: (u.indexOf("windows") != -1 && u.indexOf("touch") != -1 && u.indexOf("tablet pc") == -1) || u.indexOf("ipad") != -1 || (u.indexOf("android") != -1 && u.indexOf("mobile") == -1) || (u.indexOf("firefox") != -1 && u.indexOf("tablet") != -1) || u.indexOf("kindle") != -1 || u.indexOf("silk") != -1 || u.indexOf("playbook") != -1, 7 Mobile: (u.indexOf("windows") != -1 && u.indexOf("phone") != -1) || u.indexOf("iphone") != -1 || u.indexOf("ipod") != -1 || (u.indexOf("android") != -1 && u.indexOf("mobile") != -1) || (u.indexOf("firefox") != -1 && u.indexOf("mobile") != -1) || u.indexOf("blackberry") != -1 8 } 9 })(window.navigator.userAgent.toLowerCase()); 10 11 // Is in viewport 12 $.fn.isInViewport = function (screen) { 13 var elementTop = $(this).offset().top; 14 var elementBottom = elementTop + $(this).outerHeight(); 15 16 var viewportTop = $(window).scrollTop(); 17 var viewportBottom = (viewportTop + $(window).height()) * screen; 18 19 return elementBottom > viewportTop && elementTop < viewportBottom; 20 }; 21 22 $(window).on('load resize scroll', function () { 23 $('.shuffle-item--visible').each(function () { 24 if ($(this).isInViewport(4)) { 25 $(this).addClass('in_viewport'); 26 } else { 27 $(this).removeClass('in_viewport'); 28 } 29 }); 30 }); 31}
index.vue
js
1mounted: function() { 2 this.$nextTick(() => { 3 if (process.browser) { 4 JqueryEasing() 5 MagnificPopup() 6 useragent() 7 } 8 }) 9 } 10}
調べたところnuxt.config.jsに下記の記載が必要などで記載しました(全てのページで共通importのため)
nuxt.config.js
js
1build: { 2 plugins: [ 3 new webpack.ProvidePlugin({ 4 $: 'jquery', 5 jQuery: 'jquery', 6 'window.$': 'jquery', 7 'window.jQuery': 'jquery' 8 }) 9 ] 10} 11
npm run devをターミナルで起動させると下記のエラーが出ます。
These dependencies were not found: friendly-errors 17:19:16 friendly-errors 17:19:16 * $ in ./assets/js/useragent.js friendly-errors 17:19:16 * jQuery in ./plugins/02_jquery.easing.1.3.min.js friendly-errors 17:19:16 friendly-errors 17:19:16 To install them, you can run: npm install --save $ jQuery
多分先にjQueryが読み込まれてないのが原因かなと感じます。
どのようにすればjQueryのバージョンを変更して使用することが出来るのでしょうか。
その後調べていくとモジュール内のものは除外する記述が必要とのことでexternalを使用することにしました
nuxt.config.js
js
1build: { 2 extend(config, ctx) { 3 config.externals = { 4 jquery: 'jQuery' 5 }; 6 } 7}
するとコンパイルは出来るようになったのですが
今度はブラウザのページには
**NUXTERROR
"Cannot find module 'jQuery' from '/ ~'" **
と表示されページは閲覧できません。
ローカルのheadメソッドに記載したものより先にmountedメソッドのものが読み込まれてる印象ですが
大変お手数ではございますがご教示頂ければ幸いと存じます。
CDNにこだわってるわけではなく複数バージョンを使う必要があるので
CDN以外でも全然問題ございません。
それでは宜しくお願いいたします。
回答1件
あなたの回答
tips
プレビュー