I have started to play with the release version of Aurelia. My current goal is to see what it takes to get going with Aurelia and ASP.NET Core now that both are RTM. I have hit a couple of road blocks that have ended up being new post of their own. For example this post that covers converting a new ASP.NET Core application to use gulp is one example. Today’s post is going to cover another issue I hit trying to use the gulp tasks created by the Aurelia CLI. There will not be anything Aurelia related in this post that will another post at a later date.
gulp setup
My gulpfile.js is nothing but a reference a directory of tasks. The full file looks like the following.
require('require-dir')('tasks');
Then I have a single task in tasks/exampleTask.js that consists of the following.
import gulp from 'gulp'; gulp.task('helloGulp', function(done){ console.log('Hello Gulp!'); done(); });
The error
With the above in place if you look at the task runner explorer you will see that Gulpfile.js shows a failed to load error instead of the helloGulp task.
As suggested by task runner explorer open the output window. There are many different things that use the output window so be sure and change show output from option to Task Runner Explorer. With that done you will be able to see why the task failed to load. The following is the error I am getting.
Failed to run "C:\ProjectDirectory\Gulpfile.js"... cmd.exe /c gulp --tasks-simple C:\ProjectDirectory\tasks\exampleTask.js:3 import gulp from 'gulp'; ^^^^^^ SyntaxError: Unexpected token import at Object.exports.runInThisContext (vm.js:76:16) at Module._compile (module.js:528:28) at Object.Module._extensions..js (module.js:565:10) at Module.load (module.js:473:32) at tryModuleLoad (module.js:432:12) at Function.Module._load (module.js:424:3) at Module.require (module.js:483:17) at require (internal/module.js:20:19) at requireDir (C:\ProjectDirectory\node_modules\require-dir\index.js:116:33) at Object.<anonymous> (C:\ProjectDirectory\gulpfile.js:1:85)
The fix
I did some googling and I found this post by Mark Goodyear on using ES6 (or ES 2015) with gulp. It turns out the tasks generated by the Aurelia CLI are using ES 2015 and in order to use ES 2015 with gulp there are a few steps that must be taken first. Mark does a great job explaining those steps, but I am going to include a summary from the Visual Studio perspective.
Verify the devDependencies section in package.json contains the following. require-dir is only required if your gulpfile or tasks are using it.
"devDependencies": { "gulp": "3.9.1", "babel-preset-es2015": "^6.9.0", "require-dir": "^0.3.0" }
Next create a .babelrc file at the same level as the package.json file with the following contents.
{ "presets": [ "es2015"] }
Then rename gulpfile.js to gulpfile.babel.js.
Back in the Task Runner Explorer hit the refresh button in the top left of the window which should now load your list of tasks under Gulpfile.babel.js with no errors.
You sir just saved me. Have been banging my head for the last 2 hours. May the force be with you
Happy to hear it! Thank you for the feedback.
Hi Eric,
What version of Visual Studio are you using as I am unable to load “Gulpfile.babel.js” on Task Runner Explorer?
Hey Shaf! This was written using Visual Studio 2015.
Hey Eric, thanks for the feedback. I’m not sure why but Task Runner Explorer does not show any gulp files unless it is called gulpfile.js on my instance of VS2015. Just wondering if you had to configure anything in particular or if this is the default behaviour you are seeing?
Best I can remember I didn’t have to do anything else special. Have you tried with Visual Studio 2017? I would hope that support has improved since I wrote this post.