我正在尝试使用CommonJS模块格式,使用create-react-app(CRA)。 CRA的文档说:
..Create React App可以同时使用CommonJS和ES模块。对于Node.js的兼容性,建议主入口点是CommonJS ...
我发现当我导入一个提供ES6模块格式的模块(通过“package.json”中的“module”属性)时,CRA使用它作为模块的入口点。
因此 - 即使我的项目完全使用CJS,它也会尝试导入ES6模块 - 并且失败了。
那么 - 这是一个错误吗?或者,我是否误解了create-react-app的预期行为?
再现
我在这里复制了这个:https://github.com/mjashanks/cra-test。该项目是一个基本的CRA骨架,修改为使用CJS。
另外,我添加了一个“test-module”,其package.json包含一个“main”(CJS)和“module”(ES6)入口点。
如果我们运行npm start
,项目将无法构建,因为正在使用文件“test-module / index.esm.js”。 (我们可以编辑此文件以使用CJS格式来构建项目并使其更加清晰)。
永远不会使用“test-module / index.cjs.js”。
谢谢 :)
我发现这实际上是Webpack的一个问题(实际上是预期的行为):https://github.com/webpack/webpack/issues/5756