我将一个较大的项目转换为webpack并遇到构建错误(实际上不同的错误取决于我尝试解决的方式)。我还没有熟练使用webpack,并希望能帮助解决这些问题的典型解决方案。
某些依赖项之间似乎存在冲突:
"@babel/core": "^7.0.0-beta.42",
"@babel/preset-env": "^7.0.0-beta.42",
"backbone.radio": "2.0.0",
Webpack抱怨:Cannot find module 'babel-preset-es2015'
。看起来像backbone.radio有一个带有"presets": ["es2015"]
的.babelrc文件,babel似乎试图尊重它,即使它是一个依赖项,但是它将babel-preset-env列为devDependency,所以它'找不到。
好的,所以我尝试将babel-preset-es2015@6.3.13(同一个backbone.radio引用)显式安装为顶级依赖项,以便找到它。然后它找到它但webpack(或真正的babel)抱怨:Error: Plugin/Preset files are not allowed to export objects, only functions.
很好,所以我尝试安装与babel 7兼容的预设的新版本,希望与backbone.radio兼容。似乎名称已经改变,所以我安装了@ babel / preset-es2015 @ 7.0.0-beta.42。当然这个名字并不匹配,所以我添加了一个webpack别名,但是它不起作用,但仍然无法找到;我认为babel并没有使用babel加载预设的依赖关系而是自己加载。
所以现在我被卡住了。人们通常采取什么措施来解决这些问题?其他我可能无法确定的潜在想法是可能的:
答案 0 :(得分:0)
在Babel 6的原始生命周期中编译node_modules
中的内容并不是真的,所以它可能很痛苦。直到最近,我们明确建议用户在exclude: /node_modules/
配置中设置babel-loader
,因为在任意第三方代码上运行Babel时,现在仍然有点危险。
针对您的具体问题,您有两种选择:
exclude: /node_modules/
,以便Babel只处理您自己的代码。beta.46
,因为我们现在已经添加了对Node包概念的一流支持,这是我们之前没有的。 Babel> = beta.45只会搜索“root”包中的.babelrc
个文件。我还要补充一点,如果您的Babel配置现在位于.babelrc
,这不会影响node_modules
中的内容,所以如果您打算编译第三方代码,那么'我想将您的配置移动到项目根目录中的babel.config.js
文件,或直接将其放入webpack.config.js
。您可能还希望明确地将sourceType: 'unambiguous'
作为Babel选项传递。
最后,如果您正在使用测试版,我们绝对仍在进行重大更改,因此您不应在package.json中使用^
,因为这样可以让您获取所有内容的最新版本,与早期版本相比,我们可能已经破解了。