ES6の使用を開始したいのですが、gruntを使用してファイルを管理したいと考えています。これはこれまでの私のプロジェクト構造です:
_Gruntfile.js
package.json
dist/
src/
index.es6
_
そして、これは_index.es6
_のようになります:
_import MapGL from 'react-map-gl';
const data = [];
const viewport = new Viewport();
_
これらのパッケージはすべて_package.json
_で定義され、インストールされています。
このES6ファイルをES5 JavaScriptに変換するにはどうすればよいですか?そう、それを一種のJavaScriptに変換することはできますが、require
ステートメントをまったく変換しません。
これは私の現在のGruntfileです:
_module.exports = function(grunt) {
require('load-grunt-tasks')(grunt);
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
concat: {
options: {
separator: ';'
},
dist: {
src: ['src/**/*.js'],
dest: 'dist/<%= pkg.name %>.js'
}
},
uglify: {
options: {
banner: '/*! <%= pkg.name %> <%= grunt.template.today("dd-mm-yyyy") %> */\n'
},
dist: {
files: {
'dist/<%= pkg.name %>.min.js': ['<%= concat.dist.dest %>']
}
}
},
jshint: {
files: ['src/index.js', 'test/index.js'],
options: {
reporterOutput: '',
esnext: true,
globals: {
console: true,
module: true,
document: true
}
}
},
babel: {
files: {
expand: true,
src: ['src/*.es6'],
ext: '-compiled.js'
},
options: {
sourceMap: true,
presets: ['babel-preset-es2015']
}
},
watch: {
files: ['<%= jshint.files %>'],
tasks: ['babel', 'jshint', 'concat']
}
});
grunt.registerTask('default', ['babel', 'jshint', 'concat', 'uglify']);
};
_
grunt
を実行すると、次のファイルが生成されます。
_Gruntfile.js
package.json
dist/
myproject.js
src/
index.es6
index-compiled.js
index-compiled.map
_
しかし、_myproject.js
_には、ブラウザで失敗するvar _reactMapGl = require('react-map-gl');
という行が含まれています。
はい、 @ Matthew Herbst の推奨事項に従って、 Browserify はES6モジュールのimport
バインディングを処理します。また、 babelify という名前のパッケージは、babel browserify変換の処理に役立ちます。
以下はうまくいくようです:
babel
の代わりにbabel-cli
を使用してください。Babel が babel-cli に置き換えられたことは注目に値します6(詳細は blog を参照)それに関する情報)。したがって、まず、それをpackage.json
から削除/アンインストールします(存在する場合):
$ npm uninstall babel --save-dev
...そしてアンインストール grunt-babel :
$ npm uninstall grunt-babel --save-dev
babel-cli をインストールし、さらに すべてのes2015プラグイン用のBabelプリセット を含めます。
$ npm install --save-dev babel-cli babel-preset-es2015
次に、 。babelrc ファイルを作成し、次のコードを含むプロジェクトのルートディレクトリに保存します。
{
"presets": ["es2015"]
}
grunt-browserify
次に grunt-browserify をインストールしてpackage.json
に保存します。
$ npm install grunt-browserify --save-dev
babelify
インストール babelify を使用して、babel browserify変換を処理します。
$ npm install babelify --save-dev
Gruntfile.js
babel
タスクを削除してGruntfile.js
を更新します。 // DELETE the following...
babel: {
files: {
expand: true,
src: ['src/*.es6'],
ext: '-compiled.js'
},
options: {
sourceMap: true,
presets: ['babel-preset-es2015']
}
},
browserify
タスク: browserify: {
dist: {
files: {
// destination for transpiled js : source js
'dist/myproject.js': 'src/index.es6'
},
options: {
transform: [['babelify', { presets: "es2015" }]],
browserifyOptions: {
debug: true
}
}
}
}
grunt.registerTask
に渡された配列内のタスクの順序も更新および変更する必要がある可能性があります。これに:grunt.registerTask('default', [
'jshint',
//'concat', <-- Probably don't need to concat the files, assuming index.es6 imports the necessary modules.
'browserify:dist',
'uglify'
]);
es2015プリセット に加えて reactプリセット を使用するといくつかの利点がありますかもしれませんこれはポイント2、3の変更を伴います、およびそれに応じて上記の7、しかし、私はそれを自分で使用していません。
お役に立てれば!