[babel-node] Do not hardcode node flags (#9914)
This commit is contained in:
parent
eae7a33316
commit
5da94bff87
@ -23,6 +23,7 @@
|
|||||||
"@babel/register": "^7.0.0",
|
"@babel/register": "^7.0.0",
|
||||||
"commander": "^2.8.1",
|
"commander": "^2.8.1",
|
||||||
"lodash": "^4.17.11",
|
"lodash": "^4.17.11",
|
||||||
|
"node-environment-flags": "^1.0.5",
|
||||||
"v8flags": "^3.1.1"
|
"v8flags": "^3.1.1"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
|
|||||||
@ -6,6 +6,10 @@
|
|||||||
import getV8Flags from "v8flags";
|
import getV8Flags from "v8flags";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
|
|
||||||
|
// TODO: When support for node < 10.10 will be dropped, this package
|
||||||
|
// can be replaced with process.allowedNodeEnvironmentFlags
|
||||||
|
import allowedNodeEnvironmentFlags from "node-environment-flags";
|
||||||
|
|
||||||
let args = [path.join(__dirname, "_babel-node")];
|
let args = [path.join(__dirname, "_babel-node")];
|
||||||
|
|
||||||
let babelArgs = process.argv.slice(2);
|
let babelArgs = process.argv.slice(2);
|
||||||
@ -24,7 +28,9 @@ if (argSeparator > -1) {
|
|||||||
* that only the flag is returned.
|
* that only the flag is returned.
|
||||||
*/
|
*/
|
||||||
function getNormalizedV8Flag(arg) {
|
function getNormalizedV8Flag(arg) {
|
||||||
const matches = arg.match(/--(.+)/);
|
// v8 uses the "no" prefix to negate boolean flags (e.g. --nolezy),
|
||||||
|
// but they are not listed by v8flags
|
||||||
|
const matches = arg.match(/--(?:no)?(.+)/);
|
||||||
|
|
||||||
if (matches) {
|
if (matches) {
|
||||||
return `--${matches[1].replace(/-/g, "_")}`;
|
return `--${matches[1].replace(/-/g, "_")}`;
|
||||||
@ -33,51 +39,30 @@ function getNormalizedV8Flag(arg) {
|
|||||||
return arg;
|
return arg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// These are aliases for node options defined by babel-node.
|
||||||
|
const aliases = new Map([["-d", "--debug"], ["-gc", "--expose-gc"]]);
|
||||||
|
|
||||||
getV8Flags(function(err, v8Flags) {
|
getV8Flags(function(err, v8Flags) {
|
||||||
babelArgs.forEach(function(arg, index) {
|
for (let i = 0; i < babelArgs.length; i++) {
|
||||||
|
const arg = babelArgs[i];
|
||||||
const flag = arg.split("=")[0];
|
const flag = arg.split("=")[0];
|
||||||
|
|
||||||
switch (flag) {
|
if (flag === "-r" || flag === "--require") {
|
||||||
case "-d":
|
|
||||||
args.unshift("--debug");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "debug":
|
|
||||||
case "--debug":
|
|
||||||
case "--debug-brk":
|
|
||||||
case "--inspect":
|
|
||||||
case "--inspect-brk":
|
|
||||||
case "--experimental-modules":
|
|
||||||
args.unshift(arg);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "-r":
|
|
||||||
case "--require":
|
|
||||||
args.push(flag);
|
args.push(flag);
|
||||||
args.push(babelArgs[index + 1]);
|
args.push(babelArgs[++i]);
|
||||||
delete babelArgs[index + 1];
|
} else if (aliases.has(flag)) {
|
||||||
break;
|
args.unshift(aliases.get(flag));
|
||||||
|
} else if (
|
||||||
case "-gc":
|
flag === "debug" || // node debug foo.js
|
||||||
args.unshift("--expose-gc");
|
flag === "inspect" ||
|
||||||
break;
|
|
||||||
|
|
||||||
case "--nolazy":
|
|
||||||
args.unshift(flag);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
if (
|
|
||||||
v8Flags.indexOf(getNormalizedV8Flag(flag)) >= 0 ||
|
v8Flags.indexOf(getNormalizedV8Flag(flag)) >= 0 ||
|
||||||
arg.indexOf("--trace") === 0
|
allowedNodeEnvironmentFlags.has(flag)
|
||||||
) {
|
) {
|
||||||
args.unshift(arg);
|
args.unshift(arg);
|
||||||
} else {
|
} else {
|
||||||
args.push(arg);
|
args.push(arg);
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
|
||||||
// append arguments passed after --
|
// append arguments passed after --
|
||||||
if (argSeparator > -1) {
|
if (argSeparator > -1) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user