📌  相关文章
📜  Node.js:SyntaxError:无法在模块外使用 import 语句 - Javascript (1)

📅  最后修改于: 2023-12-03 15:33:11.068000             🧑  作者: Mango

Node.js:SyntaxError:无法在模块外使用 import 语句 - Javascript

当我们在使用 Node.js 进行 Javascript 开发时,如果在模块外使用了 import 语句,就会出现如下所示的 SyntaxError:

SyntaxError: Cannot use import statement outside a module

这是因为 Node.js 默认使用的是 CommonJS 规范,而不是 ES6 模块规范。在 CommonJS 中,我们使用 require() 来引入模块,而在 ES6 中,我们使用 import 来引入模块。

如果我们需要在 Node.js 中使用 ES6 模块规范,我们需要在文件的开头添加以下语句:

import { something } from 'somewhere';

然而,这个语句会导致 SyntaxError,因为 Node.js 并不支持 ES6 模块规范。

解决这个问题的方法有两种:

方法一:使用 Babel

Babel 是一个能够将 ES6+ 代码转换为向后兼容的 JavaScript 代码的 JavaScript 编译器。我们可以使用 Babel 来将 ES6 模块转换为 CommonJS 模块,这样就可以在 Node.js 中使用了。

首先,我们需要安装 Babel:

npm install --save-dev @babel/core @babel/cli @babel/preset-env

然后,在项目根目录下创建一个 .babelrc 文件:

{
  "presets": [
    "@babel/preset-env"
  ]
}

接下来,我们可以使用 Babel 来编译我们的代码了。假设我们的 ES6 模块代码位于 src/index.js 文件中,我们可以使用以下命令来编译它:

npx babel src --out-dir lib

这个命令会将 src 目录下的所有文件转换为 CommonJS 模块,并将它们存放在 lib 目录下。

最后,我们需要在 Node.js 中引入编译后的文件。如果编译后的文件存放在 lib/index.js 中,我们可以使用以下命令来引入它:

const module = require('./lib/index');
方法二:使用 require() 替换 import

如果我们不想使用 Babel,也可以通过手动替换 import 语句为 require() 来解决这个问题。我们需要将以下代码:

import { something } from 'somewhere';

替换为:

const { something } = require('somewhere');

这样就可以在 Node.js 中使用了。但是需要注意的是,手动替换 import 语句可能会引发其他问题,因为 importrequire() 在某些情况下有所不同。因此,如果想要更为安全和可靠地解决这个问题,最好使用 Babel。

参考文献: