I started getting stack traces when running gulp --production
to generate CSS and JS assets for a Laravel 5 project hosted on a Ubuntu 14.04 server. The error was something along the lines of:
/var/www/dev_blog/node_modules/is-number-like/lib/index.js:19 const length = val.length
SyntaxError: Use of const in strict mode.
I went through the following process to try to get NPM, Node.js, Gulp, and Laravel Elixir working successfully once again.
ubuntu ~ $ sudo apt-get remove --purge node nodejs npm
ubuntu ~ $ sudo apt-get autoremove
While troubleshooting I saw a lot of recommendations to install the packages via Nodesource: https://github.com/nodesource/distributions so I began to follow their install instructions:
ubuntu ~ $ curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash - ubuntu ~ $ sudo apt-get install -y nodejs
After running the installation script I checked the package versions:
ubuntu ~ $ node -v
v7.2.1
ubuntu ~ $ npm -v
3.10.9
I entered my project directory, removed the node_modules/
directory, and re-ran the npm install
command to pull in the modules for the project:
ubuntu /var/www/dev_blog $ rm -rf node_modules/
ubuntu /var/www/dev_blog $ npm install
At this point I ran the gulp --production
command and it ran successfully:
ubuntu /var/www/dev_blog $ gulp --production
[16:43:34] Using gulpfile /var/www/dev_blog/gulpfile.js
[16:43:34] Starting 'default'...
[16:43:34] Starting 'styles'...
Fetching Styles Source Files...
- resources/assets/css/bootstrap-flatly.css
- resources/assets/css/custom-styles.css
Saving To...
- public/css/all.css
[16:43:36] Finished 'default' after 2.2 s
[16:43:37] Finished 'styles' after 3.5 s
[16:43:37] Starting 'scripts'...
Fetching Scripts Source Files...
- resources/assets/js/jquery.min.js
- resources/assets/js/bootstrap.min.js
- resources/assets/js/moment.min.js
- resources/assets/js/bootstrap-datetimepicker.js
Saving To...
- public/js/all.js
[16:43:43] Finished 'scripts' after 5.41 s
[16:43:43] Starting 'version'...
Fetching Version Source Files...
- public/css/all.css
- public/js/all.js
Saving To...
- public/build
[16:43:43] Finished 'version' after 54 ms
[16:43:43] Starting 'copy'...
Fetching Copy Source Files...
- public/fonts/**/*
Saving To...
- public/build/fonts
[16:43:43] Finished 'copy' after 45 ms
Great success.
Here is the gulpfile.js
for reference:
process.env.DISABLE_NOTIFIER = true;
var Promise = require('es6-promise').Promise;
var elixir = require('laravel-elixir');
/*
|--------------------------------------------------------------------------
| Elixir Asset Management
|--------------------------------------------------------------------------
|
| Elixir provides a clean, fluent API for defining some basic Gulp tasks
| for your Laravel application. By default, we are compiling the Sass
| file for our application, as well as publishing vendor resources.
|
*/
elixir(function(mix) {
mix.styles([
'bootstrap-flatly.css',
'custom-styles.css'
]);
mix.scripts([
'jquery.min.js',
'bootstrap.min.js',
'moment.min.js',
'bootstrap-datetimepicker.js'
]);
mix.version(['css/all.css', 'js/all.js']);
mix.copy('public/fonts', 'public/build/fonts');
});
Here is the package.json
file for reference as well:
{
"private": true,
"scripts": {
"prod": "gulp --production",
"dev": "gulp watch"
},
"devDependencies": {
"gulp": "^3.9.1",
"laravel-elixir": "^5.0.0"
}
}
nodejs-legacy
package but it did help with the errors I was encountering