尝试在Webpack 2中使用signature_pad时发现错误!
我的项目正在使用Create React App的最新版本。 将SignaturePad与以前版本的Create React App一起使用可以按预期工作,但是当他们升级到Webpack 2时出现了一个错误。因此,我非常有信心,它与Webpack 2的新导入/导出机制有关。
目前的行为是什么?
尝试创建SignaturePad
的新实例时,应用程序崩溃,并出现与Webpack相关的特定错误:
预期的行为是什么?
该实例应按预期创建,而不会崩溃。
哪个版本的SignaturePad和哪个浏览器/设备受此问题影响?
Chrome和Safari中似乎都发生了这种情况。
@taylorlapeyre感谢您的举报。 这真的很奇怪,因为它看起来像不是返回实际的JS代码,而是返回文件的路径,即
this: __WEBPACK_IMPORTED_MODULE_1_signature_pad___default.a
等于this: "/static/media/signature_pad.2ceae229.mjs"
。
我将尝试找出问题所在,但如果任何人有任何想法并可以创建具有修复的PR,那就太好了。
@taylorlapeyre我想出了什么问题,我认为它实际上是react-create-app
的错误,尽管我也可以在此处轻松修复。 问题是Webpack 2加载了ES6版本,该版本位于signature_pad.mjs
文件中,但是我猜react-create-app
中的Webpack配置不知道如何处理扩展名为.mjs
文件-这就是为什么它返回文件名的原因。
@szimek啊,这很有道理。 我认为在这种情况下,修复程序可能应该在Create React App中。 你想在那里做个公关吗? 如果您给我一个起点,我也可以接受
仅作记录-我们的解决方法是直接将signature_pad.js
文件直接复制到我们的src
目录中。 完成此操作后,便可以按预期导入它。
非常感谢您对此快速回复,@ szimek。 我与@taylorlapeyre一起工作...只是分叉了仓库,并更改了构建过程以写出.js
文件而不是.mjs
文件。 我可以确认完全可以在我们的create-react-app上下文中使用! 但是,是的,由于mjs是一回事,因此听起来似乎更像是一个问题。
再次, @ szimek的巨大道具已经将其带到CRA了……看起来他们对支持mjs
并不很感兴趣,尽管...如此。
我们可以制作一个补丁,以不同的名称导出umd
构建,例如signature_pad.umd.js
并使用signature_pad.js
进行模块构建。 不过,不确定是否会对您当前的发行版产生多少影响。 另外,不确定此用例目前有多普遍...无论哪种方式,请让我们知道我们将如何帮助您!
是的,不过将这个文件重命名为signature_pad.es6.js
可能很有意义,以确保所有地方都支持该文件。 但是,再次重命名dist文件需要一个主要版本,因此这可能需要等待一段时间。 我需要检查另一个与默认导出与命名导出相关的问题,该问题也需要主要版本(#240)。 也许我会同时做两个。
更好的解决方法是直接导入js文件
import SignaturePad from 'signature_pad/dist/signature_pad.js';
感谢您的解决方法,从signature_pad/dist/signature_pad.js
导入对我们的atm有效。
Facebook提出了有关如何处理的官方建议。
基本上,他们认为ES6不能再被完全支持,因此图书馆应该发布ES5代码。 请参阅自述文件中的此部分:
https://github.com/facebook/create-react-app/blob/master/packages/react-scripts/template/README.md#npm -run-build-fails-to-minify
以为我会让你知道。
我还没有尝试过,但是create-react-app
v2也应该在node_modules
编译代码-https: //github.com/facebook/create-react-app/pull/3776。 signature_pad
的v3(当前处于beta版)不再使用mjs
扩展名,因此它应该与create-react-app
v2一起使用,尽管可以确认。
如果在使用CRA 2和该库的最新Beta版本时仍然存在问题,请重新打开此问题。
最有用的评论
更好的解决方法是直接导入js文件
import SignaturePad from 'signature_pad/dist/signature_pad.js';