javascript - 如何在 vue.js 中包含第 3 方 JavaScript 文件?

标签 javascript vue.js

我已经花了一天多的时间寻找解决方案。我是 JavaScript 新手,所以也许我错过了针对经验丰富的 JS 开发人员的解决方案。 我需要在单个文件 vue 组件中使用的第 3 方脚本(或者在我的应用程序中全局使用,如果这是唯一的方法)具有以下模式:

(function (win) {
  win.MyUtil = {
    "func1": function func1() { ... },
    "func2": function func1() { ... }
  }
}(window));

这扩展了浏览器的 Window 对象,以便 MyUtil 全局可见,对吧?

然后我在 index.html 文件的头部添加了一个脚本标签:

脚本文件位于/my_project_folder/src/assets 中。我还在 src 属性中尝试了许多不同的路径(例如“./assets/my_util.js”或“<%= BASE_URL %>/assets/my_util.js”)并将文件移动到不同的实际文件夹。 我在某处读到应该有一个文件夹“/my_project/static”。我试过了。

结果总是一样的。浏览器显示此警告(我自己翻译成英文): “脚本‘http://localhost:8080/@/assets/my_util.js’已加载,尽管其 MIME 类型 (text/html) 不是 JavaScript 的有效 MIME 类型。” 我认为这表明脚本实际上已加载。当然,我也尝试指定正确的 MIME 类型,但没有成功。但是,当我将警报(“my_util”)添加到脚本时,没有显示任何消息。

然后,我的 vue 组件中的代码抛出错误“ReferenceError:MyUtil 未定义”。 这种情况发生在“mounted” Hook 中,但稍后也会发生在按钮单击中,因此这不是加载顺序的问题。

这里出了什么问题?我该如何修复它?

顺便说一句,它在纯 html 中工作得很好。

最佳答案

似乎没有真正的解决方案,这意味着不修改原始第3方脚本就没有解决方案。 原因是第 3 方脚本包含“立即调用函数表达式”(IIFE):

(function (win) {
  win.MyUtil = {
    "func1": function func1() { ... },
    "func2": function func1() { ... }
  }
}(window));

所以我不得不修改第三方脚本,这是我想避免的。感谢Rishinder(VPaul)指出了正确的方向。 现在它是一个导出对象的“模块”:

var MyUtil
export default MyUtil = {
  func1: function() { ... },
  func2: function() { ... }
}

在 Vue.js 单文件组件文件 (*.vue) 中,可以像这样导入它(如果它与 *.vue 文件位于同一文件夹中):

<script>
    import MyUtil from "./my_util.js"
    // code using MyUtil goes here
</script>

关于javascript - 如何在 vue.js 中包含第 3 方 JavaScript 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61061253/

相关文章:

javascript - vue-image-upload-resize 重置图片文件

javascript - 更新 Watch Vue.js 上的 cookie

javascript - 尝试求解一个以数字为参数的定义函数,它应该返回一个可以以数字数组为参数的函数

javascript - 使用 Javascript 按住 Alt 键单击元素

javascript - Bootstrap模型ajax

google-chrome-extension - 如何从 webpack 构建中删除 eval 和 Function 构造函数以避免 CSP 问题

javascript - XMLHttpRequest 自动将反斜杠(\)替换为斜杠(/)

javascript - 无法读取空 dropzone 的属性 'removeChild'

javascript - 如何在Vue js中连接字符串和变量

javascript - Gulp/Webpack 不转译 Vue 文件