はじめに
タイトルのまんまですが、
とあるプロジェクトでnpm runスクリプトを走らせると以下のようなエラーが出たのでその対処方メモ
$ npm run sample > hoge@1.0.0 sample /Users/tweeeety/hoge > gulp /Users/tweeeety/hoge/node_modules/riot-compiler/node_modules/source-map/lib/source-map-generator.js:21 class SourceMapGenerator { ^^^^^ SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode at exports.runInThisContext (vm.js:53:16) at Module._compile (module.js:387:25) at Object.Module._extensions..js (module.js:422:10) at Module.load (module.js:357:32) at Function.Module._load (module.js:314:12) at Module.require (module.js:367:17) at require (internal/module.js:20:19) at Object.<anonymous> (/Users/tweeeety/hoge/node_modules/riot-compiler/node_modules/source-map/source-map.js:6:30) at Module._compile (module.js:413:34) at Object.Module._extensions..js (module.js:422:10) npm ERR! Darwin 17.5.0 npm ERR! argv "/Users/tweeeety/.nodebrew/node/v5.12.0/bin/node" "/Users/tweeeety/.nodebrew/current/bin/npm" "run" "compile" npm ERR! node v5.12.0 npm ERR! npm v3.8.6 npm ERR! code ELIFECYCLE npm ERR! hoge@1.0.0 compile: `gulp` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the hoge@1.0.0 compile script 'gulp'. npm ERR! Make sure you have the latest version of node.js and npm installed. npm ERR! If you do, this is most likely a problem with the hoge package, npm ERR! not with npm itself. npm ERR! Tell the author that this fails on your system: npm ERR! gulp npm ERR! You can get information on how to open an issue for this project with: npm ERR! npm bugs hoge npm ERR! Or if that isn't available, you can get their info via: npm ERR! npm owner ls hoge npm ERR! There is likely additional logging output above. npm ERR! Please include the following file with any support request: npm ERR! /Users/tweeeety/hoge/npm-debug.log
このときの環境
$ ruby -v ruby 2.4.4p296 (2018-03-28 revision 63013) [x86_64-darwin17] $ node -v v5.12.0 $ npm -v 3.8.6 $ rbenv -v rbenv 1.1.1 $ nodebrew list v5.12.0 current: v5.12.0
なにがおこったか
根本原因
githubのissueにあがってました
Version 0.7.0 of source-map fails to load on Node < 6 due to let without 'use strict'. This causes the following error:
node moduleのsource-map 0.7.0は
'use strict'を使用しないのでnodeのversion<6(6未満)にはロードできないらしい。
そのせいでエラーが発生するとのこと。
自分のところの原因
nodeが5.x.xでも、package.jsonでバージョンをがちがちに固定していれば大丈夫だと思います。
- nodeが5.x.x
- 固定していないmodule(今回でいうsource-map)のversionがあがって5.x.xでは動かなくなった
というかんじ
確認する
このプロジェクトで使っているsouce-mapを確認してみます。
# たしかに0.7.3がいる $ npm list source-map hoge@1.0.0 /Users/tweeeety/hoge ├─┬ gulp-concat@2.6.1 │ └─┬ concat-with-sourcemaps@1.1.0 │ └── source-map@0.6.1 ├─┬ gulp-cssmin@0.2.0 │ └─┬ clean-css@3.4.28 │ └── source-map@0.4.4 ├─┬ gulp-uglify@3.0.0 │ ├─┬ uglify-js@3.4.0 │ │ └── source-map@0.6.1 │ └─┬ vinyl-sourcemaps-apply@0.2.1 │ └── source-map@0.5.7 └─┬ riot@3.10.1 └─┬ riot-compiler@3.5.1 └── source-map@0.7.3
対応
記載の通りですが、
6以上にあげるとエラーはでなくなりました。
# インストールできるversionを確認 $ nodebrew ls-remote # とりあえず少しだけあげて6.x.xにする $ nodebrew install v6.14.2 $ nodebrew use v6.14.2 use v6.14.2 # エラーでない $ npm run sample
ちなみに
5.x.xもものすっごく昔というわけではないですが、
nodeの5.x.xはサポートは終了しているようです。
特に理由がなさそうならあげちゃったほうがよさそうです。
おわり
5系は古い \(^o^)/