问题描述
我正在尝试在wepback项目中包括一个节点模块(primitive-ellipsoid)。该模块未转换为es5,因此在浏览器中使用时会引发错误:
Uncaught Error: Module parse Failed: /Users/kevzettler/code/crashgiants/node_modules/primitive-ellipsoid/index.js Unexpected token (8:4)
You may need an appropriate loader to handle this file type.
| // Default to an oblate spheroid
| const { latSegments = 32,lngSegments = 64,rx = 2,ry = 1,rz = 1 } = {
| ...options
| };
|
此项目是弹出的较旧的create-react-app
webpack
。
"webpack": "3.5.1","webpack-dev-server": "2.8.2","webpack-manifest-plugin": "1.2.1",
它正在使用babel
和babel-loader
和worker-loader
,我有一个webpack.config.dev.js
,其规则如下:
rules: [
{
// "oneOf" will traverse all following loaders until one will
// match the requirements. When no loader matches it will fall
// back to the "file" loader at the end of the loader list.
oneOf: [
// Process JS with Babel.
{
test: /\.(js|jsx)$/,include: [
paths.appSrc,],exclude: /\.worker.js$/,loader: require.resolve('babel-loader'),options: {
// This is a feature of `babel-loader` for webpack (not Babel itself).
// It enables caching results in ./node_modules/.cache/babel-loader/
// directory for faster rebuilds.
//cacheDirectory: true,},{
test: /\.worker.js$/,exclude: /node_modules/,use: [
'worker-loader',require.resolve('babel-loader'),]
}
]
我在package.json中配置了babel:
"babel": {
"plugins": [
"babel-plugin-transform-decorators-legacy"
],"presets": [
[
"env",{
"targets": "defaults"
}
],"flow","react-app"
]
},
我尝试弄乱webpack.config.json中的includes
和excludes
失败。如果我需要专注于worker-loader
规则,因为它也使用babel-loader
,或者也应用了顶级babel-loader
,我会感到困惑。
更新我只想转换特定的node_module/primitive-ellipsoid
,如果我转换整个node_modules
时还有很多其他问题。我尝试过
{
test: /\.(js|jsx)$/,include: [
'node_modules/primitive-ellipsoid',paths.appSrc,
但这有相同的错误。
解决方法
您的第一条规则未找到primitive-ellipsoid
。如上述评论所述,请尝试从您的第一个构建规则中删除包含内容:
{
test: /\.(js|jsx)$/,exclude: /\.worker.js$/,loader: require.resolve('babel-loader'),options: {
// This is a feature of `babel-loader` for webpack (not Babel itself).
// It enables caching results in ./node_modules/.cache/babel-loader/
// directory for faster rebuilds.
//cacheDirectory: true,},
如果这不起作用,请尝试添加另一条规则,该规则将捕获其他任何内容作为后备,并查看它是否找到了您的库。