导入 javascript 文件以在 vue 组件中使用

Posted

技术标签:

【中文标题】导入 javascript 文件以在 vue 组件中使用【英文标题】:Importing javascript file for use within vue component 【发布时间】:2018-07-03 18:19:25 【问题描述】:

我正在做一个需要使用 js 插件的项目。现在我们正在使用 vue 并且我们有一个组件来处理基于插件的逻辑,我需要在 vue 组件中导入 js 插件文件以初始化插件。

以前,这是在标记中按如下方式处理的:

<script src="//api.myplugincom/widget/mykey.js
"></script>

这是我尝试过的,但出现编译时错误:

MyComponent.vue

import Vue from 'vue';
import * from  '//api.myplugincom/widget/mykey.js';

export default 
    data: 

我的问题是,导入这个 javascript 文件以便我可以在我的 vue 组件中使用它的正确方法是什么? ...

【问题讨论】:

您能否更准确地了解您正在使用的工具npm / webpack ...?你需要哪个库,内部/外部? 它是一个外部库,我正在使用 laravel-mix 进行编译。如果可能的话,我希望任何导入逻辑都是特定于 vue 组件的:) import something from path。路径在编译时解析,因此您需要引用本地目录中的文件。不是 URI 的结尾。 什么错误信息?如果你想使用库中包含的方法,你需要 named 类型的 import developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… import * as myModule from '//api.myplugincom/widget/mykey.js'; 还有,你的 path 是错误的 【参考方案1】:

适用于包括外部 JS 文件且无法访问已加载脚本中的 jQuery 原型方法的任何人。

我在 vanilla JS、React 和 Angular 中看到的示例项目只是使用:

$("#someId").somePlugin(options) 要么 window.$("#someId").somePlugin(options)

但是当我尝试我的 VueJS 组件中的任何一个时,我会收到:

错误:_webpack_provided_window_dot$(...).somePluginis 不是函数

我在资源加载后检查了窗口对象,我能够在window.self 只读属性中找到返回窗口本身的 jQuery 原型方法:

window.self.$("#someId").somePlugin(options)

许多示例展示了如何在 VueJS 中加载外部 JS 文件,但实际上并未使用组件中的 jQuery 原型方法。

【讨论】:

【参考方案2】:

我想在我的组件中嵌入一个脚本并尝试了上面提到的所有方法,但脚本包含document.write。然后我在 Medium 上找到了一篇关于使用 postscribe 的简短文章,这很容易解决并解决了这个问题。

npm i postscribe --save

然后我就可以从那里去了。我禁用了 eslint 的无用转义,并使用 #gist 作为模板的单个根元素 id:

import postscribe from 'postscribe';
export default 
    name: "MyTemplate",
    mounted: function() 
        postscribe(
          "#gist",
          /* eslint-disable-next-line */
          `<script src='...'><\/script>`
        );
      ,

文章在这里供参考: https://medium.com/@gaute.meek/how-to-add-a-script-tag-in-a-vue-component-34f57b2fe9bd

【讨论】:

【参考方案3】:

包含一个外部 JavaScript 文件

尝试将您的(外部)JavaScript 包含到您的 Vue 组件的挂载钩子中。

<script>
export default 
  mounted() 
    const plugin = document.createElement("script");
    plugin.setAttribute(
      "src",
      "//api.myplugincom/widget/mykey.js"
    );
    plugin.async = true;
    document.head.appendChild(plugin);
  
;
</script>

参考:How to include a tag on a Vue component

导入本地 JavaScript 文件

如果您想在 Vue 组件中导入本地 JavaScript,可以这样导入:

MyComponent.vue

<script>
import * as mykey from '../assets/js/mykey.js'

export default 
  data() 
    return 
      message: `Hello $mykey.MY_CONST!` // Hello Vue.js!
    
  

</script>

假设您的项目结构如下:

src
- assets
    - js
      - mykey.js
- components
    MyComponent.vue

并且可以在 mykey.js 中导出变量或函数:

export let myVariable = ;
export const MY_CONST = 'Vue.js';
export function myFoo(a, b) 
    return a + b;

注意:检查 Vue.js 版本2.6.10

【讨论】:

谢谢。这很有帮助。工作得很好。参考资料也很有帮助。 从 SO 到现在的最佳复制过去! MyComponent.vue 代码看起来有问题。 import 内的 export? @untill 是的,你是对的。 import 应该放在export 之外。我相应地更新了。谢谢。 如果在挂载的钩子中定义为const plugin,我将如何访问methods属性中的外部JavaScript文件?【参考方案4】:

尝试下载此脚本import * from 'path/mykey.js'. 或导入脚本&lt;script src="//api.myplugincom/widget/mykey.js"&gt;&lt;/script&gt;&lt;head&gt; 中,在组件中使用全局变量。

【讨论】:

【参考方案5】:

对于您以浏览器方式引入的脚本(即带有标签),它们通常使某些变量全局可用。

对于这些,您不必导入任何内容。它们只是可用。

如果您使用的是 Webstorm(或任何相关的 JetBrains IDE)之类的东西,您可以添加 /* global globalValueHere */ 让它知道“嘿,这不是在我的文件中定义的,但它存在。”这不是必需的,但它会使“未定义”的波浪线消失。

例如:

/* global Vue */

是我从 CDN 中拉下 Vue 时使用的(而不是直接使用它)。

除此之外,您只需像往常一样使用它。

【讨论】:

感谢您的帮助。然而,这不起作用。我目前正在以“浏览器方式”导入脚本,脚本代码无法在 vue 组件中初始化。 应该是。如果不确切知道您正在使用什么,很难说,但是您可以从浏览器控制台访问任何东西吗?此外,加载顺序很重要。在尝试运行 Vue 代码之前,您必须确保加载了什么。只需将它的脚本标签放在带有 Vue 代码的标签之上就足够了。 您也可以在设置 -> 语言和框架 -> JavaScript -> 库中将外部库添加到 phpStorm / WebStorm。然后你会得到代码提示 :) i.imgur.com/DVNXDpF.png 确实如此。 Webstorm 和朋友们也会在&lt;script&gt; 本身上给出一个波浪形的说法,说没有本地版本。你可以点击Alt+Enter 来做同样的事情。

以上是关于导入 javascript 文件以在 vue 组件中使用的主要内容,如果未能解决你的问题,请参考以下文章

安装组件后导入javascript文件

从共享文件夹导入 Angular 自定义管道时出错

Angular - 如何将 Javascript 导入 Angular 组件

用python实现希尔排序(shell_sort)

配置多媒体组件以在网站文件夹中发布

javascript 创建一个javascript文件以在其他地方使用