My understanding from the docs
I see that Babel 6 has three presets: es2015, response, and stage-x. I read that I can install the ones in .babelrc as follows:
{ "presets": ["es2015", "react", "stage-0"] }
or directly in the package. JSON:
{ ..., "version": xxx, "babel": { "presets": ["es2015", "react", "stage-0"] }, ..., }
I can use babel-loader with webpack as follows:
loader: 'babel?presets[]=es2015'
My problem
So, to compile everything beautiful and clean, I add the babel-loader , which has just been updated to work with Babel6, in the webpack configuration as follows:
module.exports = function(options) { var jsLoaders = ['babel?presets[]=es2015']; [...] loaders: [ { test: /\.js$/, exclude: /node_modules/, loaders: jsLoaders }, { test: /\.jsx$/, exclude: /node_modules/, loaders: options.production ? jsLoaders : ['react-hot'].concat(jsLoaders) }, [...]
Now, when I compile without .babelrc in the root settings or presets installed in package.JSON , that is, only with the preinstalled babel-loader es2015 installation installed in the webpack configuration, I get an unexpected token error about static propTypes in my React component class:
ERROR in ./app/components/form/index.jsx Module build failed: SyntaxError: /Library/WebServer/Documents/yarsk.test/app/components/form/index.jsx: Unexpected token (19:19) 17 |
On GitHub I was told that this is a stage-1 function, namely transform-class-properties . Therefore, I would like to immediately implement stage-0 .
BUT
When I do this by adding .babelrc or defining package.JSON as described above, I get a very strange error with a build error:
ERROR in ./app/components/form/index.jsx Module build failed: Error: /Library/WebServer/Documents/yarsk.test/app/components/form/index.jsx: We don't know what to do with this node type. We were previously a Statement but we can't fit in here? at NodePath.insertAfter (/Library/WebServer/Documents/yarsk.test/node_modules/babel-traverse/lib/path/modification.js:181:13) at NodePath.replaceWithMultiple (/Library/WebServer/Documents/yarsk.test/node_modules/babel-traverse/lib/path/replacement.js:92:8) at handleClassWithSuper (/Library/WebServer/Documents/yarsk.test/node_modules/babel-plugin-transform-class-constructor-call/lib/index.js:80:10) at PluginPass.Class (/Library/WebServer/Documents/yarsk.test/node_modules/babel-plugin-transform-class-constructor-call/lib/index.js:101:11) at newFn (/Library/WebServer/Documents/yarsk.test/node_modules/babel-traverse/lib/visitors.js:233:27) at NodePath._call (/Library/WebServer/Documents/yarsk.test/node_modules/babel-traverse/lib/path/context.js:72:18) at NodePath.call (/Library/WebServer/Documents/yarsk.test/node_modules/babel-traverse/lib/path/context.js:44:17) at NodePath.visit (/Library/WebServer/Documents/yarsk.test/node_modules/babel-traverse/lib/path/context.js:102:12) at TraversalContext.visitQueue (/Library/WebServer/Documents/yarsk.test/node_modules/babel-traverse/lib/context.js:151:16) at TraversalContext.visitSingle (/Library/WebServer/Documents/yarsk.test/node_modules/babel-traverse/lib/context.js:111:19) at TraversalContext.visit (/Library/WebServer/Documents/yarsk.test/node_modules/babel-traverse/lib/context.js:195:19) at Function.traverse.node (/Library/WebServer/Documents/yarsk.test/node_modules/babel-traverse/lib/index.js:139:17) at NodePath.visit (/Library/WebServer/Documents/yarsk.test/node_modules/babel-traverse/lib/path/context.js:106:22) at TraversalContext.visitQueue (/Library/WebServer/Documents/yarsk.test/node_modules/babel-traverse/lib/context.js:151:16) at TraversalContext.visitMultiple (/Library/WebServer/Documents/yarsk.test/node_modules/babel-traverse/lib/context.js:106:17) at TraversalContext.visit (/Library/WebServer/Documents/yarsk.test/node_modules/babel-traverse/lib/context.js:193:19) at Function.traverse.node (/Library/WebServer/Documents/yarsk.test/node_modules/babel-traverse/lib/index.js:139:17) @ ./app/index.jsx 9:0-28
Or in a word: Module build failed: Error: /.../index.jsx: We don't know what to do with this node type. We were previously a Statement but we can't fit in here? Module build failed: Error: /.../index.jsx: We don't know what to do with this node type. We were previously a Statement but we can't fit in here?
This is where I am stuck. I wrote this component with Babel5 when I was able to compile using babel-loader, and everything was fine:
loader: 'babel?optional[]=runtime&stage=0
Now I get the indicated error compilation.
- Is this a
babel-loader problem or a babel problem? - Where do I need to configure
stage-0 so that it doesn't throw errors?
Update
When compiling with the settings of presets and using the mentioned workaround for a class export error (should not export the class until it is created), the order of the specified presets changes the error message. When I set stage-0 , the error first is now 'this' is not allowed before super() (This is an error on an internal node. Probably an internal error) When I put stage-0 second or third, I get a syntax message error on top.
Last
For the latest advances regarding these errors, see my post or the new tracker for buffer problems on the fabricator . (Basically the compilation is fixed from 6.2.1, but other things are happening now)
All errors mentioned in this article are fully fixed with Babel 6.3.x. Update your dependencies if you still have problems.