项目作者: tomchentw

项目描述 :
`babel` CLI replacement with multiple node version support by babel-preset-env
高级语言: JavaScript
项目地址: git://github.com/tomchentw/babel-multi-env.git
创建时间: 2017-10-16T04:22:03Z
项目社区:https://github.com/tomchentw/babel-multi-env

开源协议:

下载


babel-multi-env

babel CLI replacement with multiple node version support by babel-preset-env and babel-plugin-transform-runtime. Useful for node.js libraries/modules

Version Travis CI Quality Coverage Dependencies Gitter

Usage

Transforms:

example/src/index.js

  1. import fs from "fs";
  2. import promisify from "util.promisify";
  3. export async function demoBumpVersion(nextVersion = "1.0.0") {
  4. const content = await promisify(fs.readFile)("package.json", "utf8");
  5. const json = JSON.parse(content);
  6. json.version = nextVersion;
  7. await promisify(fs.writeFile)(
  8. "package.json",
  9. JSON.stringify(json, null, 4),
  10. "utf8"
  11. );
  12. return () => console.log(`Successfully bumped version to: ${nextVersion}`);
  13. }

with the command:

  1. cd example
  2. yarn babel-multi-env --multi-versions 8.0.0 6.0.0 4.0.0 0.12.0 0.10.0 --given src/index.js --out-dir lib

and output these files:

  1. example/lib/index.js
  2. example/lib/index__0.10.0__.js
  3. example/lib/index__0.12.0__.js
  4. example/lib/index__4.0.0__.js
  5. example/lib/index__6.0.0__.js
  6. example/lib/index__8.0.0__.js

where

example/lib/index.js

  1. var gte = require("semver").gte;
  2. var version = process.version;
  3. if (gte(version, "8.0.0")) {
  4. module.exports = require("./index__8.0.0__.js");
  5. } else if (gte(version, "6.0.0")) {
  6. module.exports = require("./index__6.0.0__.js");
  7. } else if (gte(version, "4.0.0")) {
  8. module.exports = require("./index__4.0.0__.js");
  9. } else if (gte(version, "0.12.0")) {
  10. module.exports = require("./index__0.12.0__.js");
  11. } else {
  12. module.exports = require("./index__0.10.0__.js");
  13. }

example/lib/index8.0.0.js

  1. "use strict";
  2. var _interopRequireDefault = require("babel-runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.demoBumpVersion = demoBumpVersion;
  7. var _stringify = _interopRequireDefault(
  8. require("babel-runtime/core-js/json/stringify")
  9. );
  10. var _fs = _interopRequireDefault(require("fs"));
  11. var _util = _interopRequireDefault(require("util.promisify"));
  12. async function demoBumpVersion(nextVersion = "1.0.0") {
  13. const content = await (0, _util.default)(_fs.default.readFile)(
  14. "package.json",
  15. "utf8"
  16. );
  17. const json = JSON.parse(content);
  18. json.version = nextVersion;
  19. await (0, _util.default)(_fs.default.writeFile)(
  20. "package.json",
  21. (0, _stringify.default)(json, null, 4),
  22. "utf8"
  23. );
  24. return () => console.log(`Successfully bumped version to: ${nextVersion}`);
  25. }

example/lib/index6.0.0.js

  1. "use strict";
  2. var _interopRequireDefault = require("babel-runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.demoBumpVersion = void 0;
  7. var _stringify = _interopRequireDefault(
  8. require("babel-runtime/core-js/json/stringify")
  9. );
  10. var _asyncToGenerator2 = _interopRequireDefault(
  11. require("babel-runtime/helpers/asyncToGenerator")
  12. );
  13. var _fs = _interopRequireDefault(require("fs"));
  14. var _util = _interopRequireDefault(require("util.promisify"));
  15. let demoBumpVersion = (() => {
  16. var _ref = (0, _asyncToGenerator2.default)(function*(nextVersion = "1.0.0") {
  17. const content = yield (0, _util.default)(_fs.default.readFile)(
  18. "package.json",
  19. "utf8"
  20. );
  21. const json = JSON.parse(content);
  22. json.version = nextVersion;
  23. yield (0,
  24. _util.default)(_fs.default.writeFile)("package.json", (0, _stringify.default)(json, null, 4), "utf8");
  25. return () => console.log(`Successfully bumped version to: ${nextVersion}`);
  26. });
  27. return function demoBumpVersion() {
  28. return _ref.apply(this, arguments);
  29. };
  30. })();
  31. exports.demoBumpVersion = demoBumpVersion;

……and you get the idea.


More sample code for node@4, node@0.12 and node@0.10

js /* lib/index__4.0.0__.js */ "use strict"; var _interopRequireDefault = require("babel-runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.demoBumpVersion = void 0; var _regenerator = _interopRequireDefault(require("babel-runtime/regenerator")); var _stringify = _interopRequireDefault(require("babel-runtime/core-js/json/stringify")); var _asyncToGenerator2 = _interopRequireDefault(require("babel-runtime/helpers/asyncToGenerator")); var _fs = _interopRequireDefault(require("fs")); var _util = _interopRequireDefault(require("util.promisify")); var demoBumpVersion = function () { var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/ _regenerator.default.mark(function _callee() { var nextVersion, content, json, _args = arguments; return _regenerator.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: nextVersion = _args.length > 0 && _args[0] !== undefined ? _args[0] : "1.0.0"; _context.next = 3; return (0, _util.default)(_fs.default.readFile)("package.json", "utf8"); case 3: content = _context.sent; json = JSON.parse(content); json.version = nextVersion; _context.next = 8; return (0, _util.default)(_fs.default.writeFile)("package.json", (0, _stringify.default)(json, null, 4), "utf8"); case 8: return _context.abrupt("return", function () { return console.log(`Successfully bumped version to: ${nextVersion}`); }); case 9: case "end": return _context.stop(); } } }, _callee, this); })); return function demoBumpVersion() { return _ref.apply(this, arguments); }; }(); exports.demoBumpVersion = demoBumpVersion;


js /* lib/index__0.12.0__.js */ "use strict"; var _interopRequireDefault = require("babel-runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.demoBumpVersion = void 0; var _regenerator = _interopRequireDefault(require("babel-runtime/regenerator")); var _stringify = _interopRequireDefault(require("babel-runtime/core-js/json/stringify")); var _asyncToGenerator2 = _interopRequireDefault(require("babel-runtime/helpers/asyncToGenerator")); var _fs = _interopRequireDefault(require("fs")); var _util = _interopRequireDefault(require("util.promisify")); var demoBumpVersion = function () { var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/ _regenerator.default.mark(function _callee() { var nextVersion, content, json, _args = arguments; return _regenerator.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: nextVersion = _args.length > 0 && _args[0] !== undefined ? _args[0] : "1.0.0"; _context.next = 3; return (0, _util.default)(_fs.default.readFile)("package.json", "utf8"); case 3: content = _context.sent; json = JSON.parse(content); json.version = nextVersion; _context.next = 8; return (0, _util.default)(_fs.default.writeFile)("package.json", (0, _stringify.default)(json, null, 4), "utf8"); case 8: return _context.abrupt("return", function () { return console.log("Successfully bumped version to: ".concat(nextVersion)); }); case 9: case "end": return _context.stop(); } } }, _callee, this); })); return function demoBumpVersion() { return _ref.apply(this, arguments); }; }(); exports.demoBumpVersion = demoBumpVersion;


js /* lib/index__0.10.0__.js */ "use strict"; var _interopRequireDefault = require("babel-runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.demoBumpVersion = void 0; var _regenerator = _interopRequireDefault(require("babel-runtime/regenerator")); var _stringify = _interopRequireDefault(require("babel-runtime/core-js/json/stringify")); var _asyncToGenerator2 = _interopRequireDefault(require("babel-runtime/helpers/asyncToGenerator")); var _fs = _interopRequireDefault(require("fs")); var _util = _interopRequireDefault(require("util.promisify")); var demoBumpVersion = function () { var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/ _regenerator.default.mark(function _callee() { var nextVersion, content, json, _args = arguments; return _regenerator.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: nextVersion = _args.length > 0 && _args[0] !== undefined ? _args[0] : "1.0.0"; _context.next = 3; return (0, _util.default)(_fs.default.readFile)("package.json", "utf8"); case 3: content = _context.sent; json = JSON.parse(content); json.version = nextVersion; _context.next = 8; return (0, _util.default)(_fs.default.writeFile)("package.json", (0, _stringify.default)(json, null, 4), "utf8"); case 8: return _context.abrupt("return", function () { return console.log("Successfully bumped version to: ".concat(nextVersion)); }); case 9: case "end": return _context.stop(); } } }, _callee, this); })); return function demoBumpVersion() { return _ref.apply(this, arguments); }; }(); exports.demoBumpVersion = demoBumpVersion;

Installation

  1. npm i --save-dev babel-multi-env
  2. # or
  3. yarn add --dev babel-multi-env

Note on the peerDependencies

There are currently five peerDependencies listed under the package.json for babel-multi-env. Be sure not to screw up their versions sicne babel@^7 are currently in beta and can be found under the next dist-tags on npm.

dependencies

Your should add these to your dependencies:

  • “babel-runtime”: “^7.0.0-beta.3”
  • “semver”: “^5.4.1”

since they’ll be used in the runtime.

devDependencies

And, these three for the code generation only:

  • “babel-core”: “^7.0.0-beta.3”,
  • “babel-plugin-transform-runtime”: “^7.0.0-beta.3”,
  • “babel-preset-env”: “^7.0.0-beta.3”,

Options

screen shot 2017-11-01 at 10 55 57 am

  1. [babel-multi-env]
  2. --multi-versions list of supported semver versions. Example: 8.0.0 6.0.0
  3. 4.0.0 [array] [required]
  4. --given source glob patterns [array] [required]
  5. --out-dir compile into an output directory [string] [required]
  6. [babel-preset-env]
  7. --use-built-ins apply babel-preset-env for polyfills with "useBuiltIns":
  8. "usage" (via babel-polyfill) [string] [choices: "usage"]
  9. [babel-plugin-transform-runtime]
  10. --helpers Enables inlined Babel helpers (classCallCheck, extends, etc.)
  11. are replaced with calls to moduleName [boolean] [default: true]
  12. --polyfill Enables new built-ins (Promise, Set, Map, etc.) are transformed
  13. to use a non-global polluting polyfill[boolean] [default: true]
  14. --regenerator Enables generator functions are transformed to use a
  15. regenerator runtime that does not pollute the global scope
  16. [boolean] [default: true]
  17. --module-name sets the name/path of the module used when importing helpers
  18. [string] [default: babel-runtime]
  19. [babel-core]
  20. --presets list of preset names [array]
  21. --plugins list of plugins names [array]
  22. Options:
  23. --help, -h Show help [boolean]
  24. --version, -v Show version number [boolean]

Examples