SyntaxError: Cannot use import statement outside a module
在练习反混淆的时候报错,使用的代码和文档一致:
import traverse from "@babel/traverse";
import { parse } from "@babel/parser";
import generate from "@babel/generator";
import * as types from "@babel/types";
import fs from "fs";
const code = `var a = !![];
var b = "abc" == "bcd";
var c = (1 << 3) | 2;
var d = parseInt("5" + "0");`;
let ast = parse(code);
traverse(ast, {
"UnaryExpression|BinaryExpression|ConditionalExpression|CallExpression": (
path
) => {
const { confident, value } = path.evaluate();
if (value == Infinity || value == -Infinity) return;
confident && path.replaceWith(types.valueToNode(value));
},
});
const { code: output } = generate(ast);
console.log(output);
报错原因是不能使用 import 语句。在 Node.js 环境中默认使用的是 CommonJS 规范。需要使用 require 语句进行导入。import 是 ES6 中的模块化写法,CommonJS 模块与 ES6 模块不兼容。
解决问题
解决也很简单,他在报错中提示了:(node:23888) Warning: To load an ES module, set “type”: “module” in the package.json or use the .mjs extension.
意思是在package.json文件中配置 “type”: “module” 就行
问题又来了,我没有package.json怎么办
// 一 : cd 到js文件目录下
// 二 : 输入 npm init
// 三 : 提示输入一些信息,可以全部按回车健 默认信息
然后就会出现package.json文件
打开后 配置type:
就可以运行成功了
如果报错 TypeError: traverse is not a function
看我的另一篇文章 【完美解决】@babel/xxx :TypeError: traverse is not a function 和 TypeError: generateis not a function