web-dev-qa-db-ja.com

grunt-contrib-uglifyは「let」キーワードを解析しませんか?

エラーが出ます、

「予期しないトークン:名前(bazz)」

私のうなり声タスクがuglifyを実行しているとき。その行で気付いた唯一のことは、「var」の代わりに「let」キーワードを使用していることでした。そのため、そのエラーがスローされる理由がわかりませんでした。

それぞれにlet varNameを含むif elseステートメントがあります。

function foo (bar) {
    if (condition) {
        let bazz = fn();
        //doSomething with bazz
        _.assign(bar, bazz);
    } else {
        let bazz = fn2();
        //doSomething different with bazz
        _.assign(bar, bazz);
    }
}

var bazz = {}; if else句の前にありますが、fn()およびfn2()に関係なくbazzを割り当てる必要があるため、それを避けたかったのです。

他の誰かがこれに遭遇したかどうか、そして彼らがそれを修正するために何をしたか知りたいと思っていました。前もって感謝します!

23
Michael M

このトピックをもう少し調べたところ、grunt-contrib-uglifyおよびgulp-uglifyにはUglifyJSが依存関係にあり、ES6 "Harmony"はまだサポートされていないことがわかりました。更新については https://github.com/mishoo/UglifyJS2/issues/448 をフォローしてください。

grunt-babel などのツールを使用して、ES6コードをES5にコンパイルすることもできます。

20
Timo

私は公式の gulp-uglify npmページで以下に遭遇しました。

推奨事項に注意してください:

Nodeストリームでエラー状態を適切に処理するために、このプロジェクトでは pump の使用をお勧めします。詳細については、 Why Use Pump? を参照してください。 。

上記のページの例の私の実装は:

gulpfile.js

var gulp = require('gulp');  
var pump = require('pump');  

// the npm page states:  
// can be a git checkout or another module 
// (such as `uglify-js-harmony` for ES6 support)
var uglifyjs = require('uglify-js-harmony');   
var minifier = require('gulp-uglify/minifier');  

var concat = require('gulp-concat');

gulp.task('compress', function (cb) {  
  // the 'options' argument is included in the example, 
  // but i don't know what it does or how it can be removed  
  var options = {  
    preserveComments: 'license'  
  };  

  pump([  
      gulp.src('my_scripts/*.js'),  // gets all js scripts in this folder  
      minifier(options, uglifyjs),  
      concat('my_bundled_script.js'), // concatenates all scripts into this file  
      gulp.dest('dist')  // puts the file into this folder
    ],cb 
  );  
});  

package.json

{
  "devDependencies": {
    "gulp": "latest",
    "pump": "latest",
    "gulp-concat": "latest",
    "gulp-uglify": "latest",
    "uglify-js-harmony": "latest"
  },
  "dependencies": {}
}

結果

uglify-js-harmonyを使用しない場合:

  • pumpは、エラーがどこから発生したかを特定するのに役立ちました(gulp-uglifyを使用する場合)
  • letステートメントが含まれているファイルでエラーが発生した

uglify-js-harmonyを使用すると、エラーは発生しませんでした。

その他の考慮事項:

上記のページには現在次の情報が表示されています。

// can be a git checkout or another module  
// (such as `uglify-js-harmony` for ES6 support)
var uglifyjs = require('uglify-js');

しかし、uglify-js-harmonyをインストールすると、次の警告メッセージが表示されました。

npm WARNは非推奨[email protected]:uglify-esを支持して非推奨

uglify-esの代わりにuglify-js-harmonyを使用しようとすると、ここに記載されているようなエラーメッセージが表示されました。

https://github.com/terinjokes/gulp-uglify/issues/287

私はそこから問題のスレッドを追跡しようとしましたが、道に迷ってしまい、uglify-esの実装方法の明確な解決策が見つかりませんでした。

0
user1063287