从 html 调用时导入的 Javascript 函数未定义

Dis*_*urb 3 html javascript webpack laravel-5 vuejs2

我正在学习 laravel 5.5 和 VueJs,我的问题是当我从 js 文件导出一些函数并从第二个 js 文件导入它时,它无法从 html 正文调用。例子:

A.js

function funA(){
}
export {funA};
Run Code Online (Sandbox Code Playgroud)

B.js

import {funA} from './A.js';
Run Code Online (Sandbox Code Playgroud)

此时,如果我funA在 B.js 中使用该函数,它会起作用,但是如果我在 html 页面上使用它,它会说 funA 未定义。例如:

<!DOCTYPE html>
<html lang="en">
<body>
  <button onClick="funA()"></button>
  <script src="{{asset('js/B.js')}}"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我的 webpack 配置是这样的:

mix.scripts('resources/assets/js/libs/materialize.js', 'public/js/libs/materialize.js')
    .js('resources/assets/js/A.js', 'public/js/js/A.js')
    .js('resources/assets/js/B.js', 'public/js/B.js');
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激。提前谢谢您。

aks*_*aks 7

我认为您的 HTML 期望funA位于全局window对象上。新的 JavaScript 模块系统不会向全局命名空间添加任何内容,以避免命名空间污染。

如果您只是想在按钮上使用 is,那么执行以下操作应该可以让您工作。

window.funA = funA
Run Code Online (Sandbox Code Playgroud)

您可以在您的B.js. 不过,我不会推荐这样做,因为我看到你似乎正在使用 Vue 并且有更好的方法来做到这一点。让我知道这是否有效,也请尝试分享您的 Vue 代码,以便有人可以帮助您以正确的方式做到这一点。