使用axios出现SyntaxError: Unexpected identifier错误

5

我正在尝试使用axios,如下所示:

import axios from 'axios';

axios.post("http://localhost:3000/test", {"prop1": "value"}, {headers: {'X-Custom-Header': 'foobar'}})

然后编译器报错:
/home/developer/Desktop/reason/interoperate/src/Ax.js:1
(function (exports, require, module, __filename, __dirname) { import axios from 'axios';
                                                                     ^^^^^

SyntaxError: Unexpected identifier
    at new Script (vm.js:74:7)
    at createScript (vm.js:246:10)
    at Object.runInThisContext (vm.js:298:10)
    at Module._compile (internal/modules/cjs/loader.js:670:28)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:713:10)
    at Module.load (internal/modules/cjs/loader.js:612:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:551:12)
    at Function.Module._load (internal/modules/cjs/loader.js:543:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:744:10)
    at startup (internal/bootstrap/node.js:238:19)
developer@monad:~/Desktop/reason/interoperate/src$ node Ax.js
/home/developer/Desktop/reason/interoperate/src/Ax.js:1
(function (exports, require, module, __filename, __dirname) { import axios from 'axios';  

我导入的路径是否有误?


你使用的是哪个版本的Node.js?如果我是你,我会尝试使用require语法而不是import。 - Jose Mato
节点版本是 v10.4.0。 使用 var axios = require('axios'); 是有效的。但我需要使用 import - softshipper
1
为什么需要导入(import)?目前,Node 10.4.0将导入(import)作为实验性功能来使用,我猜这只包括您自己的模块(带有扩展名mjs)和Node核心模块(例如fs)。如果您需要使用导入(import),那么我猜您可以使用Babel或一些转换器,但是现在要使用require。直到导入(import)开始完全可用。https://nodejs.org/api/esm.html - Jose Mato
3个回答

9
Node.js目前还不完全支持ES模块,这意味着您不能使用import关键字。您现在可以使用源代码转换器(如Babel和Webpack)来使用它,但这将需要构建步骤。
编辑:公正地说,Node.js 10.4.0具有对ES模块的实验性支持,该支持位于标志后面:--experimental-modules。这还需要使用.mjs文件扩展名来处理JS文件。
该功能当前标记为稳定性:1-实验性 - 不建议在生产环境中使用该功能。

这并不是完全正确的。NodeJS 10支持它,但仍处于实验性功能阶段。 - Jose Mato

2
你可以按照以下方式使其与node 10.4.0兼容:

// Create a file named index.mjs (the extension is the key)

import axios from 'axios';

console.log(axios);

运行方式:

node --experimental-modules index.mjs

但是这个功能仍处于实验阶段,应该避免在生产系统中使用。

2
我也曾经卡在这里,但我在这里找到了答案: https://github.com/nuxt/docs/issues/42 由于官方稳定版本的node.js仍不支持导入(import)语句,我们应该使用require关键字。像这样:const Axios=require('axios')。
当然,别忘了从npm安装axios模块。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接