javascript - 使用 webpack 导出和捆绑函数并在 html 脚本标签中调用它
问题描述
我一直在尝试一些非常简单的事情——使用 webpack 导出和捆绑(以及 babel 转译)一个函数,然后在我的 html 页面的脚本标签中调用它。
sample.js - 使用 webpack 捆绑
export default function sampleFunctionExported1(){
console.log("sampleFunctionExported1");
}
Webpack 配置(版本 = 4.44.1)
module.exports = (env, arguments) => {
entry: {
main: ['./assets/js/sample.js', './assets/css/main.scss'],
entry2: ['./assets/js/entry2.js', './assets/css/entry2.scss']
},
output: {
path: path.join(__dirname, '../public/js'),
filename: '[name].js',
library: 'MyLibrary',
libraryTarget: 'var',
// some additional configs/options that I have tried
// libraryTarget: 'window', // tried with this option, it does not work
// libraryTarget: 'umd', // tried with this option, it does not work
// libraryExport: 'default', // tried with this option, it does not work
}
我虽然就像将library
andlibraryTarget
目标添加到 webpack 配置一样简单,然后我应该能够将我的函数调用为MyLibrary.sampleFunctionExported1()
.
但是当我MyLibrary
在浏览器控制台中执行时,它显示如下并MyLibrary.sampleFunctionExported1()
返回... is not a function
错误
我在许多这些问题/答案中都遵循了建议:answer 1、answer 2、answer 3和其他各种博客文章,但它对我根本不起作用。
因此,在花了这么多时间之后,我将其发布在这里,希望有人可以帮助我了解问题所在。
编辑1: 这是webpack捆绑后生成的文件:/public/js/sample.js
PS - 忽略该entry2.js
文件,因为它是一个空文件,我只是添加它以显示我的配置,因为我不确定是否有多个入口点会导致我目前面临的这个问题。
解决方案
由于您的导出方式:
export default function sampleFunctionExported1(){
console.log("sampleFunctionExported1");
}
...您的MyLibrary
变量将具有以下形状:
{
default: function() { ... }
}
如果您希望它具有以下形状:
{
sampleFunctionExported1: function() { ... }
}
...您需要进行命名导出而不是默认导出:
export function sampleFunctionExported1() {
console.log("sampleFunctionExported1");
}
推荐阅读
- curl - 使用 openssl1.1.1i 编译 curl 时出错
- java - 我有这样的每一个问题。有谁知道如何修理它?谢谢你
- sql - Oracle 11g 日期添加
- executable-jar - 错误:在运行 Maven 使用 spark-submit 构建的 jar 时无法加载类 org.first.spark.Test
- sql - 如何替换sql中的元素
- cakephp-4.x - 如何使用 CakePHP 4 中的授权插件正确检查 ACL?
- javascript - 以 Outlook 格式解析电子邮件
- xml - XSLT XPath:如果更新了一个子节点,则从不同的子节点(对于同一个工作人员)获取数据-如何处理?
- javascript - 无法检测到触摸拖放事件
- snort - 防止恶意文件下载的 Snort 规则