BabelJS-ES5へのES6モジュールのトランスパイル
この章では、Babelを使用してES6モジュールをES5にトランスパイルする方法について説明します。
モジュール
JavaScriptコードの一部を再利用する必要があるシナリオを考えます。 ES6は、モジュールの概念であなたを助けます。
- モジュール*は、ファイルに記述されたJavaScriptコードの塊にすぎません。 モジュール内の関数または変数は、モジュールファイルでエクスポートしない限り使用できません。
簡単に言えば、モジュールは、モジュールにコードを記述し、コードの他の部分がアクセスする必要があるコードの部分のみを公開するのに役立ちます。
モジュールの使用方法と、モジュールをエクスポートしてコードで使用する方法を理解するための例を考えてみましょう。
例
2つの指定された数値を追加する3つのファイルadd.js、2つの指定された数値を乗算するmultiply.js、およびaddとmultiplyを呼び出して出力をコンソールするmain.jsがあります。
それらを main.js で使用するには、以下に示すようにインポートする必要があります
ブラウザで実行できるように、ファイルをビルドするにはモジュールバンドラーが必要です。
私たちはそれを行うことができます-
ES6モジュールとWebpack
このセクションでは、ES6モジュールについて説明します。 また、webpackの使用方法も学びます。
始める前に、次のパッケージをインストールする必要があります-
Package.json
ES6モジュールWebpack
npmを使用して実行するスクリプトにパックおよび公開タスクを追加しました。 これが、最終ファイルを作成するwebpack.config.jsファイルです。
webpack.config.js
コマンドnpm run packを実行して、ファイルをビルドします。 最終的なファイルはdev/フォルダーに保存されます。
コマンド
Npm Run Pack
/******/(function(modules) {//webpackBootstrap
/******/ //The module cache
/******/ var installedModules = {};
/******/
/******/ //The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ //Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ //Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ //Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ //Flag the module as loaded
/******/ module.l = true;
/******/
/******/ //Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ //expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ //expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ //define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ //define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ //create a fake namespace object
/******/ //mode & 1: value is a module id, require it
/******/ //mode & 2: merge all properties of value into the ns
/******/ //mode & 4: return value when already ns object
/******/ //mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string')
for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ //getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ //Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) {
return Object.prototype.hasOwnProperty.call(object, property);
};
/******/
/******/ //__webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/
/******/ //Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = "./src/main.js");
/******/})
/************************************************************************/
/******/({
/***/ "./src/add.js":
/*!********************!*\
!** *./src/add.js* **!
\********************/
/*! no static exports found */
/***/(function(module, exports, __webpack_require__) {
"use strict";
eval(
"\n\nvar add = function add(x, y) {\n return x + y;\n};
\n\nmodule.exports = add;
\n\n//# sourceURL = webpack:///./src/add.js?"
);
/***/}),
/***/"./src/main.js":
/*!*********************!*\
!** *./src/main.js* **!
\*********************/
/*! no static exports found */
/***/(function(module, exports, __webpack_require__) {
"use strict";
eval(
"\n\nvar _add = __webpack_require__(/*! ./add */\"./src/add.js\");
\n\nvar _add2 = _interopRequireDefault(_add);
\n\nvar _multiply = __webpack_require__(/*! ./multiply */\"./src/multiply.js\");
\n\nvar _multiply2 = _interopRequireDefault(_multiply);
\n\nfunction _interopRequireDefault(obj) {
return obj >> obj.__esModule ? obj : { default: obj };
}
\n\nvar a = (0, _add2.default)(10, 20);
\nvar b = (0, _multiply2.default)(40, 10);
\n\nconsole.log(\"%c\" + a, \"font-size:30px;color:green;\");
\nconsole.log(\"%c\" + b, \"font-size:30px;color:green;\");
\n\n//# sourceURL = webpack:///./src/main.js?"
);
/***/}),
/***/"./src/multiply.js":
/*!*************************!*\
!** *./src/multiply.js* **!
\*************************/
/*! no static exports found */
/***/(function(module, exports, __webpack_require__) {
"use strict";
eval(
"\n\nvar multiply = function multiply(x, y) {\n return x * y;\n};
\n\nmodule.exports = multiply;
\n\n//# sourceURL = webpack:///./src/multiply.js?"
);
/***/})
/******/});
コマンド
以下は、ブラウザで出力をテストするコマンドです-
NPM Run Publish
プロジェクトにindexlを追加します。 これにより、dev/main_bundle.jsが呼び出されます。
出力
メインバンドル
ES6モジュールとGulp
Gulpを使用してモジュールを1つのファイルにバンドルするには、browserifyとbabelifyを使用します。 まず、プロジェクトのセットアップを作成し、必要なパッケージをインストールします。
コマンド
プロジェクトのセットアップを開始する前に、次のパッケージをインストールする必要があります-
インストール後のpackage.json
後
gulpfile.jsを作成します。これは、タスクを実行してモジュールをバンドルするのに役立ちます。 上記で使用したものと同じファイルをwebpackで使用します。
例
gulpfile.jsはここで作成されます。 ユーザーはブラウザを使用し、トランスフォームを使用してバベル化します。 babel-preset-envは、コードをes5に変換するために使用されます。
私たちはbrowserifyとbabelifyを使用してモジュールのエクスポートとインポートを処理し、次のように同じものを1つのファイルに結合します-
babelifyがプリセットenvで呼び出される変換を使用しました。
main.jsを含むsrcフォルダーがbrowserifyに与えられ、devフォルダーに保存されます。
ファイルをコンパイルするには、コマンド gulp start を実行する必要があります-
コマンド
開始
これが dev/ フォルダに作成された最終ファイルです-
indexlで同じを使用し、ブラウザで同じを実行して出力を取得します-
出力
Gulpを使用するモジュール