我将ES5包重写为现代语法以避免弃用警告并将其发布到npm。
大多数React项目,包括基于next.js
和create-react-app
的项目都使用uglify.js,它们会在class
关键字处中断。
{ Error: commons.js from UglifyJs
Unexpected token: name
...
如何正确编写使用类的React组件并使用uglify.js和npm?
答案 0 :(得分:2)
React.createClass
已被弃用,因为它将在即将推出的版本中从主react
包中删除,但如果您仍需要/想要使用它来编写组件而不会获取you can still use the now-separate create-react-class
package instead弃用警告。
如果您正在使用ES6类编写将发布到npm的组件,则需要添加一个透明步骤,以便在可预见的未来将ES5代码发布到npm,因为 - 正如您所见 - 工具哪些不支持ES6会打破它们,使用它们的应用程序将在本机不支持ES6类的浏览器中中断(例如IE11)。
如果您已经设置了Babel来转换JSX,那么在发布之前将类转换为额外的工作 - 安装babel-preset-es2015
预设并将其添加到您的Babel配置中。
即使我们达到了工具和浏览器中ES6支持不再是问题的程度,标准ES6类与createClass
相比,编写React组件并不是一种非常方便的方法,因为它们引入了{{1样板,需要手动方法绑定,并且必须单独声明constructor
等静态属性。
通常使用提议的语言功能的实验性实现(propTypes
涵盖最有用的功能)以便克服这些便利功能(即使上面关于编写没有ES6的React组件的文档也有这样的例子)和使用Babel插件将它们移除,所以如果你使用这些功能,你将不得不继续编译你的代码!