javascript - 我想在nuxt的CDN中放多个版本的jquery
问题描述
目前,jQuery 3.1.4 正在由 CDN 在首页外部加载。
索引.vue
head: {
bodyAttrs: {
id: 'overview'
},
script: [
{
src: 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js'
}
]
}
在下方页面中,由于 jQuery 插件,1.8.3 包含在 CDN 中。
**/index.vue
head: {
bodyAttrs: {
id: 'lower'
},
script: [
{
src: 'https://cdnjs.cloudflare.com/ajax/libs/jquery/1.8.3/jquery.min.js'
}
]
}
用jQuery创建的多个js放在assets目录下,模块化导入。还有一些其他的js文件。
ex)~/assets/useragent.js
/* global $ */
export default function () {
// User agent
var _ua = (function (u) {
return {
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,
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
}
})(window.navigator.userAgent.toLowerCase());
// Is in viewport
$.fn.isInViewport = function (screen) {
var elementTop = $(this).offset().top;
var elementBottom = elementTop + $(this).outerHeight();
var viewportTop = $(window).scrollTop();
var viewportBottom = (viewportTop + $(window).height()) * screen;
return elementBottom > viewportTop && elementTop < viewportBottom;
};
$(window).on('load resize scroll', function () {
$('.shuffle-item--visible').each(function () {
if ($(this).isInViewport(4)) {
$(this).addClass('in_viewport');
} else {
$(this).removeClass('in_viewport');
}
});
});
}
索引.vue
mounted: function() {
this.$nextTick(() => {
if (process.browser) {
JqueryEasing()
MagnificPopup()
useragent()
}
})
}
}
检查的时候,我补充说应该在nuxt.config.js中描述以下内容。
nuxt.config.js
build: {
plugins: [
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery',
'window.$': 'jquery',
'window.jQuery': 'jquery'
})
]
}
当我运行 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
如何使用 CDN 编译单独的 jQuery 版本?
之后,我检查了它并将其设置为外部,这样它就不会在模块中读取
build: {
extend(config, ctx) {
config.externals = {
jquery: 'jQuery'
};
}
}
可以编译,但是页面是“Cannot find module 'jQuery' from '/~'”,看不到。
解决方案
从请求补充/更正到问题,它是暂时的解决方案吗?来到。
- 在方法中加载 jquery 后,创建一个描述要立即初始化的过程的函数
- 使用 beforemonted 函数注册事件
- 可以在 head 脚本的 onload 中触发该事件
通过 onload 读取 jQuety 到 head 方法的脚本后,方法触发
head() {
return {
bodyAttrs: {
id: 'photographer'
},
script: [
{
src:
'https://cdnjs.cloudflare.com/ajax/libs/jquery/1.8.3/jquery.min.js',
async: true,
onload: this.onJqueryLoad()
}
]
}
}
阅读后输入您要触发的方法
methods: {
onJqueryLoad() {
this.$nextTick(() => {
if (process.browser) {
JqueryEasing()
MagnificPopup()
useragent()
}
})
}
}
安装方法删除了其他人,因为他们是所以它工作。
推荐阅读
- html - Html按钮没有在后面的事件中触发代码
- sql - 避免硬编码我想在 SQL 中搜索的日期?
- python - 如何使用 python ( AWS Rekognition ) 将人脸添加到自动收集?
- javascript - 当我的 html 页面中的内容较少时,如何将页脚粘贴到底部
- c# - 如何使用滚动条在面板上获取光标位置
- hbase - 使用单列值过滤器的 hbase shell 命令
- c++ - Linux C++编程:为什么连接是.so,生成的可执行依赖库是.so.version
- git - Bitbucket Git - 了解拉取请求中两个分支之间的差异?
- spring-boot - 从 Spring boot 1.x 迁移到 2.x;如何修复“persistenceExceptionTranslationPostProcessor”异常
- html - 有一些元素内联和一些元素块取决于它们的相邻元素