Typescript/babel 导入导致“_1.default 不是函数”

2024-03-09

我正在尝试使用https://github.com/timmywil/panzoom https://github.com/timmywil/panzoom来自使用 webpack 和 babel 编译的 typescript 项目。

问题是打字稿方法调用:

import Panzoom from '@panzoom/panzoom';
Panzoom(document.querySelector("#pic"));

被转译为以下 JavaScript:

panzoom_1.default(document.querySelector("#pic"));

然后会生成以下运行时错误:

Uncaught TypeError: panzoom_1.default is not a function

如果我调试 javascript 那么panzoom_1具有预期的函数签名,但没有default member.

这是无数不同类型的模块、默认导出以及 babel 和 typescript 导入它们的方式差异之间的某种类型的问题,但我完全迷失了。根据文档,panzoom是一个 UMD 模块(如果有帮助的话)。

我找到了一种解决方法,可以以不同的方式导入,然后将其强制转换为任何,但这显然很疯狂,对吧?:

import * as Panzoom from '@panzoom/panzoom';
(<any>Panzoom)(document.querySelector("#pic"));

这是项目配置:

测试.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">   
</head>
<body>
    <img src="pic.jpg" id="pic" />
</body>
<script src="dist/bundle.js" type = "text/javascript"></script>
</html>

test.ts

import Panzoom from '@panzoom/panzoom';
Panzoom(document.querySelector("#pic"));

tsconfig.json

{
    "compilerOptions": {
      "outDir": ".",
      "sourceMap": false,
      "noImplicitAny": true,
      "suppressImplicitAnyIndexErrors": true,
      "module": "commonjs",
      "target": "es6",
      "jsx": "react",
      "allowSyntheticDefaultImports": true,
      "traceResolution": true,
      "experimentalDecorators": true,
      "baseUrl": ".",
    }
  }

包.json

{
  "name": "grr",
  "version": "0.0.0",
  "private": true,
  "dependencies": {
    "@babel/polyfill": "^7.8.7",
    "@panzoom/panzoom": "^4.1.0",
    "npm-update-all": "^1.0.1",
    "webpack": "^4.43.0",
    "webpack-cli": "^3.3.11"
  },
  "devDependencies": {
    "@babel/cli": "^7.8.4",
    "@babel/core": "^7.9.6",
    "@babel/plugin-proposal-class-properties": "^7.8.3",
    "@babel/plugin-proposal-object-rest-spread": "^7.9.6",
    "@babel/plugin-transform-async-to-generator": "^7.8.3",
    "@babel/preset-env": "^7.9.6",
    "@babel/preset-react": "^7.9.4",
    "@babel/preset-typescript": "^7.9.0",
    "awesome-typescript-loader": "^5.2.1",
    "babel-loader": "^8.1.0",
    "typescript": "^3.8.3"
  }
}

webpack.config.js

var webpack = require("webpack");
var path = require('path');

module.exports = (env, options) => {

    var PROD = (options.mode === 'production');

    return {

        entry: [
            "@babel/polyfill",
            path.resolve(__dirname, "test.ts")
        ],

        output: {
            filename: "bundle.js",
            libraryTarget: "var"
        },

        resolve: {
            modules: [
                'node_modules'
            ],
            extensions: [".ts", ".tsx", ".js", ".json"]
        },

        module: {
            rules: [
                {
                    test: /\.tsx?$/, 
                    loaders: [
                        {
                            loader: 'babel-loader',
                            options:
                                {
                                    compact: false,
                                    presets: [
                                        [
                                            "@babel/preset-env",
                                            {
                                                targets: "> 0.25%, not dead"
                                            }
                                        ]
                                    ]
                                }
                        },
                        'awesome-typescript-loader'
                    ]
                }
            ]
        },
        devtool : false,
        optimization: {
            minimize: PROD
        }
    }
};

.babelrc

{
  "presets": ["@babel/env"],
  "plugins": ["@babel/transform-async-to-generator"],
  "compact":false
}

我已经设法通过添加来修复它"esModuleInterop": true to tsconfig.json.

https://www.typescriptlang.org/docs/handbook/compiler-options.html https://www.typescriptlang.org/docs/handbook/compiler-options.html

发出 __importStar 和 __importDefault 帮助程序以实现运行时 babel 生态系统兼容性,并启用 --allowSyntheticDefaultImports 以实现类型系统兼容性。

这对我来说没有任何意义,但这里有更多信息:

了解 tsconfig 文件中的 esModuleInterop https://stackoverflow.com/questions/56238356/understanding-esmoduleinterop-in-tsconfig-file

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Typescript/babel 导入导致“_1.default 不是函数” 的相关文章

  • pubnub 和 head.js

    有没有人成功整合过pubnub http www pubnub com 和 head js 正确吗 Pubnub http www pubnub com 希望我将他们的脚本放在页面底部并带有 div 就在它前面的标签 这可以确保在最后调用
  • 仅单击 div 内部

    我正在为一个小网站制作教程 我只想让教程气泡可点击 因此 当我们尝试单击气泡之外的某些内容时 什么也不会发生 换句话说 我希望我的 html 不可点击 而 tutorial bubble 可点击 尝试这个 jQuery function h
  • Javascript - 在加载所有图像后执行

    看了别人的问题我想 window onload 会回答我的问题 我已经尝试过这个 但它会在页面加载时立即执行代码 而不是在图像加载之后 如果有什么区别的话 图像来自 CDN 并且不是相对的 有人知道解决办法吗 我没有使用 jQuery 想要
  • Angular 6 中的 Http 错误处理

    我正在尝试使用 Angular 6 中的以下类来处理 http 错误 我从服务器收到 401 未经授权状态 但我没有看到控制台错误消息 HttpErrorsHandler ts 文件 import ErrorHandler Injectab
  • 在鼠标光标位置添加 cytoscape 节点

    我想在画布上的单击事件上的鼠标箭头位置添加一个 cytoscape 节点 我怎样才能做到这一点 我的方法 效果不太好 我可以通过单击创建一个节点 但无法确保创建的节点的位置位于我单击的位置 使用这样的东西 cy click function
  • 以一定时间间隔连续重复运行 JavaScript 函数

    这是我的第一个问题 希望您尽快回答 我想要代码连续重复一个函数 我尝试了一些代码 但没有成功 我尝试了这段代码 我想在一段时间后重复这个功能 我努力了setInterval and setTimeout 但是 我还没有收到结果 这将重复该任
  • Chrome 扩展同步调用 - 仅在窗口关闭后创建窗口

    我有这个代码 function voteNewWindow mailNum chrome windows create url http www google com incognito true function window conso
  • 为什么 length 是 `Array` 的属性而不是 `Array.prototype` 链

    所以我在 V8 控制台上玩了很多 我做到了 Object getOwnPropertyNames 我期望得到 结果 然而 length 所以这意味着不是成为原型链的一部分 length是所有人的成员财产Array对象 这是一个错误 还是有任
  • 使用 JavaScript 生成 PDF 文件

    我正在尝试将 XML 数据从网页转换为 PDF 文件 并且希望能够完全在 JavaScript 中完成此操作 我需要能够绘制文本 图像和简单的形状 我希望能够完全在浏览器中完成此操作 我刚刚写了一个名为jsPDF https github
  • 循环遍历元素并逐步为每个元素应用 CSS 规则

    我有一个网格布局 每个网格布局中都有不同数量的元素 我想动态添加内联grid column通过循环遍历 div 中存在的每个元素的 CSS 规则 ul 与一类 list 所以 HTML 代码的输出需要是 ul class list ul u
  • 如何更改自动完成中的结果过滤器?

    我不想进行字面匹配 而是想通过正则表达式选择结果 我可以覆盖自动完成的默认行为来完成此任务还是需要替代结构 有一个内置的方法可以做到这一点 只需提供一个函数source http jqueryui com demos autocomplet
  • Google 地图 API:忽略 DirectionService 请求中的季节性限制

    我目前正在开发一张地图 其中显示两点之间的最短路线 使用不同的交通工具 我注意到 有时 例如在冬季关闭的道路不会被考虑在内 我发现我可以使用方向服务 下面的代码 忽略高速公路 收费站和渡轮 但我一生都无法弄清楚如何 是否可以忽略季节性限制
  • 如何检测元素内容何时发生变化

    我正在寻找一种方法来监视元素内动态填充 无页面重新加载 内容 以便我可以将类添加到另一个元素 到目前为止我有这个 HTML div class message container div class messages error span
  • 如何打开弹出窗口并用父窗口中的数据填充它?

    如何使用 JavaScript jQuery 使用父页面中 JS 变量的数据填充弹出窗口 在我的示例中 我有一个文件名数组 我在父窗口中最多列出五个 如果还有更多 我想提供一个链接来打开弹出窗口并列出数组中的每个帖子 因此 如果我打开一个包
  • 从 DirectionsRenderer 中获取折线或标记的事件

    我正在使用 DirectionsService 和路线方法来生成 DirectionsResult 我还使用 DirectionsRenderer 对象来显示结果 因为它非常易于使用 我在检测 Directions changed 事件时没
  • 尝试在 React 应用程序中连接到 MySQL 数据库时,无法读取未定义的属性(读取“查询”)错误

    我正在尝试连接到 MySQL 数据库并在单击按钮后在 React 应用程序中运行查询 一些它如何给出错误 我当前的代码如下所示 import mysql from mysql function App async function sync
  • 使用 AngularJS 多部分表单数据将文件上传到 Google Cloud Storage

    我正在尝试使用 AngularJS 中指定的多部分方法将图像文件上传到 Google Cloud Storagehttps cloud google com storage docs json api v1 how tos upload m
  • RoR - Rails 中的大文件上传

    我有一个 Rails Web 应用程序 允许用户上传视频 视频存储在 NFS 安装的目录中 当前的设置适用于较小的文件 但我也需要支持大文件上传 最多 4GB 当我尝试上传 4GB 文件时 它最终会发生 但从用户体验的角度来看很糟糕 上传开
  • IE 中的每个 JavaScript 支持?

    我有这个代码
  • mozilla pdf.js 没有全视图

    我喜欢这个 pdf 查看器https github com mozilla pdf js https github com mozilla pdf js Demo http mozilla github com pdf js web vie

随机推荐

  • 检查 UITextView 中的文本是否由于自动换行而换行

    如何检查文本是否在UITextView由于自动换行而转到下一行 我目前有代码来检查用户是否输入新行 从键盘 BOOL textView UITextView textView shouldChangeTextInRange NSRange
  • 使用 OpenCV 时找不到模块 cv2

    我已经安装了OpenCV https en wikipedia org wiki OpenCV在 Raspberry Pi 上的 Occidentalis 操作系统 Raspbian 的一个变体 上 使用这个脚本 https github
  • Graphql 和往返。这只是ios应用程序的问题吗?

    我正在重新审视 graphql 我试图理解为什么节省往返对开发人员有好处 提出请求的费用这么贵吗 我有网络开发背景 让我们将标准 Rest api 与 graphql api 进行比较 我需要检索用户的个人信息及其朋友列表 传统的 Rest
  • 在 jQuery UI 中触发鼠标拖动

    使用 jQuery 1 2 x 和 jQuery UI 1 5 x 可以像这样手动触发拖动 jQuery myDiv mousedown function ev target jQuery ev target if target hasCl
  • Laravel 5 销毁所有用户会话并强制注销

    有没有办法销毁所有会话 我需要注销所有用户 想知道 astrisan 是否可以做到这一点 谢谢你 这实际上取决于您选择的会话驱动器 如果您使用文件驱动器 您可以删除storage framework sessions path 如果您使用数
  • PHP 匿名函数与 array_walk

    我尝试将 array walk 与匿名函数一起使用 但总是收到错误 Parse error syntax error unexpected T FUNCTION in on line X if empty myArray array wal
  • Chrome 和 Firefox 中的 WebSocket 在不活动一分钟后断开连接

    我发现 Chrome 和 Firefox 中的 WebSocket 在闲置一分钟后就会断开连接 根据我在网上看到的内容 我完全将责任归咎于代理或某些服务器设置或其他东西 但在 IE 或 Edge 中不会发生这种情况 看起来如果套接字在一分钟
  • 在数据库中存储长字符串好吗?

    我需要在数据库中存储长字符串 该字符串可能有 5 或 6 个句子长 您认为这是一个很好的设计策略吗 或者我应该存储该字符串的 id 然后创建与另一个包含存储该字符串的文件位置的表的关系 您能给出两者的优点和缺点吗 字符串已被预处理并存储在数
  • 具有命令行历史记录和制表符补全功能的 mit-scheme REPL

    我正在阅读SICP http mitpress mit edu sicp full text book book html我正在使用mit scheme http www gnu org software mit scheme 通过以下方式
  • WebAPI传递的post参数为null

    我正在使用 WebAPI 2 进行测试 并且创建了以下控制器方法 POST api values public string Post FromBody string value string returnValue Return valu
  • 基本的多对多左连接查询

    所以我有3张表 users 成就 Achievements unlocked 多对多 我想要一个查询返回所有可用的成就 并提及当前用户 例如 id user 123 已解锁的成就 我怎样才能做到这一点 这应该涉及左连接 但如果我添加 WHE
  • AngularJS 文件夹结构 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 如何为大型且可扩展的 AngularJS 应用程序布局文件夹结构 按类型排序 左侧是按类型组织的应用程序 对于较小的应用程序来说还不错 但即使在
  • 无法在关闭时从模态中删除数据。每次都显示相同的内容

    无法在关闭时从模态中删除数据 每次都显示相同的内容 body on hidden bs modal modal function this removeData bs modal 这个功能也不起作用 当我将数据传递到相同的模式并删除内容时
  • 十六进制颜色如何工作?

    代表CSS颜色的十六进制是什么意思 在不记住确切代码的情况下如何知道它是什么颜色 它与RGB 和CMYK 系统有什么关系吗 我想了一下FF means 255RGB 但后来我意识到 15 2 不是 255 而是 225 十六进制使用十六个不
  • 捆绑包格式无法识别、无效或不合适

    代码 8 1 语言 Objective C 我可以在 iPhone 上运行该项目 但无法在模拟器上运行 I tried 1 删除DerivedData文件夹的所有数据 2 清理项目并重新启动项目 3 删除资源文件夹 但这没有用 对于那些无法
  • PHP 中的正则表达式重复捕获组

    我正在尝试从一个带有路线的文件中获取信息 因此对于这项工作 我选择了正则表达式 但我遇到了重复信息的问题 为了做一个更好的问题 我将把我拥有的内容和我想要的内容放在一起 所以我有一个文件 Codes C Connected S Static
  • 如何在 scala 中按 Ordered 参数化 Int

    我有一个具有参数化类型的类 我想对其进行比较运算符 我认为我需要使用 Ordered 特征来实现这一点 但编译器不喜欢我使用它 假设我有以下课程 class Test T lt Ordered T def someOp t T if t l
  • 仅当在构建服务器上运行时单元测试才会失败

    为了帮助单元测试 我们已经完成了DateTime委托中的类 以便DateTime Now可以在单元测试中被覆盖 public static class SystemTime region Static Fields public stati
  • 如何检测我的 Android 应用程序中的广告拦截器?

    有什么方法可以检测广告拦截器何时在应用程序中运行 我想在我的应用程序中检测用户是否使用任何应用程序来阻止应用程序中的广告 如果是 那么我想向用户显示弹出窗口 要求他在使用应用程序时禁用广告拦截器 Android 操作系统没有提供官方方法来以
  • Typescript/babel 导入导致“_1.default 不是函数”

    我正在尝试使用https github com timmywil panzoom https github com timmywil panzoom来自使用 webpack 和 babel 编译的 typescript 项目 问题是打字稿方