从 HTML 文件访问捆绑的 javascript 中的函数(使用 webpack)
Accessing function in bundled javascript (using webpack) from HTML file
我目前正在开发一个 Web 应用程序,并且正在重构我的代码以便它被 WebPack 捆绑。
在我的 HTML 中,我有一个按钮,单击时会调用 sendMessage()
函数,
<button type="button" class="btn btn-default" onclick="sendMessage(document.getElementById('claim').value)">Submit</button>
在我的代码的第一个版本中,sendMessage()
函数是在 .js
文件中定义的,我直接在 HTML、
中导入了该文件
<script src="my_js/newsArticleScript.js"></script>
sendMessage() 函数直接在文件中声明,它不在任何 class 或模块中,但它会调用同一文件中定义的其他函数,所以我不想将其分开。
但是现在它被WebPack 打包了。这是我的配置文件(homepageScript.js
用于另一页):
const path = require('path')
module.exports = {
entry: {
homepage: './src/homepageScript.js',
newspage: './src/newsArticleScript.js'
},
output: {
filename: '[name].bundle.js',
path: path.resolve(__dirname, 'dist/my_js')
}
}
我更改了 HTML 上的脚本导入以导入捆绑版本。
现在,当我按下按钮时,出现错误
[Error] ReferenceError: Can't find variable: sendMessage
我读过它,我了解到 webpack 不会全局公开函数。我试图导出该函数,但一直出现相同的错误。
谁能帮我解决这个问题?基本上我需要的是了解如何配置 webpack 或更改 JS,以便 HTML.
可以访问它
我是 JS 的新手,所以我很确定我的应用程序的设计方式不是最好的,所以任何关于改进的提示(也许我应该使用模块,或者有更好的方法来调用 JS 函数单击按钮)也将受到欢迎。谢谢:)
通常使用基于文本的事件处理程序不是一个好主意。也就是说,您有几个选择,而且更改的数量会越来越多。
要使文本 onchange
处理程序正常工作,sendMessage
必须是全局的。因此,最快的解决方法是更改您的代码来执行此操作。例如,如果你有
function sendMessage(arg){}
在您的代码中,您需要添加一个额外的
window.sendMessage = sendMessage;
之后将其公开为全局变量。
一种更现代的方法是从按钮中删除 onchange
,并在 HTML 中用 ID 标记按钮,例如id="some-button-id"
.
然后在你的JS代码中,你可以做
var button = document.querySelector("#some-button-id");
button.addEventListener("change", function(){
sendMessage(document.getElementById('claim').value);
});
使用 JS 代码添加 change
处理函数,而不是使用 HTML 属性。
我目前正在开发一个 Web 应用程序,并且正在重构我的代码以便它被 WebPack 捆绑。
在我的 HTML 中,我有一个按钮,单击时会调用 sendMessage()
函数,
<button type="button" class="btn btn-default" onclick="sendMessage(document.getElementById('claim').value)">Submit</button>
在我的代码的第一个版本中,sendMessage()
函数是在 .js
文件中定义的,我直接在 HTML、
<script src="my_js/newsArticleScript.js"></script>
sendMessage() 函数直接在文件中声明,它不在任何 class 或模块中,但它会调用同一文件中定义的其他函数,所以我不想将其分开。
但是现在它被WebPack 打包了。这是我的配置文件(homepageScript.js
用于另一页):
const path = require('path')
module.exports = {
entry: {
homepage: './src/homepageScript.js',
newspage: './src/newsArticleScript.js'
},
output: {
filename: '[name].bundle.js',
path: path.resolve(__dirname, 'dist/my_js')
}
}
我更改了 HTML 上的脚本导入以导入捆绑版本。 现在,当我按下按钮时,出现错误
[Error] ReferenceError: Can't find variable: sendMessage
我读过它,我了解到 webpack 不会全局公开函数。我试图导出该函数,但一直出现相同的错误。
谁能帮我解决这个问题?基本上我需要的是了解如何配置 webpack 或更改 JS,以便 HTML.
可以访问它我是 JS 的新手,所以我很确定我的应用程序的设计方式不是最好的,所以任何关于改进的提示(也许我应该使用模块,或者有更好的方法来调用 JS 函数单击按钮)也将受到欢迎。谢谢:)
通常使用基于文本的事件处理程序不是一个好主意。也就是说,您有几个选择,而且更改的数量会越来越多。
要使文本
onchange
处理程序正常工作,sendMessage
必须是全局的。因此,最快的解决方法是更改您的代码来执行此操作。例如,如果你有function sendMessage(arg){}
在您的代码中,您需要添加一个额外的
window.sendMessage = sendMessage;
之后将其公开为全局变量。
一种更现代的方法是从按钮中删除
onchange
,并在 HTML 中用 ID 标记按钮,例如id="some-button-id"
.然后在你的JS代码中,你可以做
var button = document.querySelector("#some-button-id"); button.addEventListener("change", function(){ sendMessage(document.getElementById('claim').value); });
使用 JS 代码添加
change
处理函数,而不是使用 HTML 属性。