如何在没有uglify.js问题的情况下将作为类的React Component发布到NPM?

时间:2017-06-14 09:43:00

标签: javascript reactjs npm uglifyjs

我将ES5包重写为现代语法以避免弃用警告并将其发布到npm。

大多数React项目,包括基于next.jscreate-react-app的项目都使用uglify.js,它们会在class关键字处中断。

{ Error: commons.js from UglifyJs
Unexpected token: name
...

如何正确编写使用类的React组件并使用uglify.js和npm?

1 个答案:

答案 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插件将它们移除,所以如果你使用这些功能,你将不得不继续编译你的代码!