ava: SyntaxError: Unexpected token export (import)
Description
Ava starts to give SyntaxError: Unexpected token export
with babelrc es2015 set to “modules”: false.
Does not happen if modules props is not set.
AND Specifying custom config via ava/babel in package.json does not help.
Webpack uses same config. Babel compiles files successfully if executed manually as
babel ./src/app/actions/constants/shared.js --presets=node6
Error Message & Stack Trace
src/app/actions/constants/shared.js:1
(function (exports, require, module, __filename, __dirname) { export var NOT_STARTED = 'NOT STARTED';
^^^^^^
SyntaxError: Unexpected token export
at Object.exports.runInThisContext (vm.js:76:16)
at Module._compile (module.js:542:28)
at loader (/Users/dlebedynskyi/Documents/Code/code/node_modules/babel-register/lib/node.js:144:5)
at require.extensions.(anonymous function) (/Users/dlebedynskyi/Documents/Code/code/node_modules/babel-register/lib/node.js:154:7)
at extensions.(anonymous function) (/Users/dlebedynskyi/Documents/Code/code/node_modules/require-precompiled/index.js:16:3)
at Object.require.extensions.(anonymous function) [as .js] (/Users/dlebedynskyi/Documents/Code/code/node_modules/ava/lib/process-adapter.js:104:4)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
Config
package.json:
{
"ava": {
"files": [
"test/**/*.spec.js"
],
"source": [
"src/**/*.{js,jsx}"
],
"concurrency": 5,
"require": [
"babel-register",
"babel-polyfill",
"ignore-styles",
"./test/setup.js"
],
"babel": "inherit"
}
}
.babelrc
{
"plugins": [
"transform-export-extensions",
"transform-class-properties",
["transform-builtin-extend", {
"globals": ["Error"]
}],
["transform-object-rest-spread", {
"useBuiltIns": true
}],
["transform-react-jsx", {
"useBuiltIns": true
}],
["transform-regenerator", {
"async": false
}],
["transform-runtime", {
"helpers": false,
"polyfill": false,
"regenerator": true
}],
"react-hot-loader/babel"
],
"presets": [
"react",
["latest", {
"es2015" : {
"modules": false,
"loose": true
}
}]
]
}
Command-Line Arguments
npm run ava
What I had tried and it did not work
- specify custom babel config in ava section
"ava": {
...
"require": [
"babel-register",
"babel-polyfill",
"ignore-styles",
"./test/setup.js"
],
"babel": { "presets": [ "react", "latest"] }
}
- specify “node6”
"ava": {
...,
"babel": {
"babelrc": false,
"presets": [ "node6" ]
}
},
- Try use extend as https://github.com/avajs/ava/blob/master/docs/recipes/babelrc.md#extend-an-alternate-config-file - same result.
Environment
Node.js v6.9.1
darwin 16.1.0
ava 1.7.0
It looks like test files are being transpired correctly but for source files are ignored 😦.
This happens only with modules:false. And this is being set so for tree shacking webpack2. To enable common js modules I’ve tried things above an it still looks like .babelrc is used without overrides.
About this issue
- Original URL
- State: closed
- Created 8 years ago
- Comments: 25 (4 by maintainers)
Where do I set
modules: false!?modules: falsedisables transpiling the module syntax to Node.js’ module system. You’ll need to enable that for AVA to work.Yeah so this is working for me:
I then run my tests like this:
BABEL_ENV=test gulp avaIt means I can keep module transpilation disabled for the rollup build and can transpile them when running ava
Ah! The issue is with
babel-core/registerusing the.babelrcconfig, which isn’t set up to transform module syntax. Currently there’s nothing AVA can do about this.That said, you could still simplify the
ava.babelsection to:And the test files themselves will run.
I’ve been thinking about how we could provide better support for Babel-based projects. I’ll keep your use case in mind, where you want AVA to transpile source files using a different config than used by your build step.
Same here. I have no .babelrc set up (don’t need to, I’m using webpack), and want to use ava with es6 modules. After trying all the above configuration setups, I still get the same error
Using a .babelrc, it works. I copied https://github.com/jamestalmage/__ava-0.8-with-babel-6
I’ll leave a comment here since this is the latest issue on AVA.
I fixed the
SyntaxError: Unexpected token importerror in Node 12 withNo
esmpackage or babel configuration was required to useimport/exportin local files, test files, and imported modules, as long as they also havetype:moduleandmain:index.jsset.https://github.com/fregante/webext-storage-cache/commit/47b0077fe94b4ee765582bb03276ccd3269dc3e9#diff-b9cfc7f2cdf78a7f4b91a753d10865a2
I’m using the AVA 3.3.0
@stevenmathews we ended up still having client.babelrc and server.babelrc. Both are using babel-preset-env now. Server one is having test section for Ava like @ahumphreys87 suggested. We also saw problem with babel-register and “import” statements in node_modules - like lodash-es. Anyway thanks to @ahumphreys87 for idea of solution
@dlebedynskyi that’s odd. Not sure how to help you further though. Any chance you could set up a GitHub repo with a reproduction?