我希望为项目使用ES2015模块。根据{{3}}:
Optional({
"cloud_score" = "0.03926652301686606";
date = "2014-02-04T03:30:01";
id = "LC8_L1T_TOA/LC81270592014035LGN00";
resource = {
dataset = "LC8_L1T_TOA";
planet = earth;
};
"service_version" = v1;
url = "https://earthengine.googleapis.com/api/thumb?thumbid=bc77b079c8ecd07cd668c576c22b83a4&token=51a4298b6aae4529caee9ed0b64e636f";
})
我也尝试过:
~\Code\spa-test $ node --experimental-modules (node:8104) ExperimentalWarning: The ESM module loader is experimental.
> import * as sapper from '@sapper/server'; Thrown:
import * as sapper from '@sapper/server';
^
SyntaxError: Unexpected token *
哪个失败import {middleware} from '@sapper/server';
如何使node.js加载SyntaxError: Unexpected token {
ESM模块?
答案 0 :(得分:1)
您需要将代码保存在扩展名为“ .mjs”的文件中,以将其标记为ES6模块。
在Node.js V12中,还有一个命令行开关"--input-type=module"
,在交互式使用Node.js(REPL)的情况下,该开关可能会起作用。
'@sapper/server'
不是Node.js中的合法模块路径。模块文件名的路径必须以'.'
或'..'
开头,文件扩展名必须为'.mjs'
,因此合法的导入语句应为
import * as sapper from './@sapper/server.mjs';
当“ @sapper”不是模块文件名而是软件包名称,并且package.json定义包含“ "type": "module"
”时,它也应该起作用(我尚未对此进行测试)。
另请参阅documentation of "Node.js V12 ECMAScript Modules"和"Node.js V10 ECMAScript Modules"
答案 1 :(得分:0)
正如@michaeldrehner所提到的,这是Sapper特有的问题(我已经编辑标题以反映这一点)。
我的问题是
src
中的文件是为sapper输入的,并非设计为直接由节点加载。
npm build
或sapper build
会将sapper *和(server.js汇总到一个包中。此输出位于` sapper / build / server / server中.js
该捆绑包可以由节点node .\__sapper__\build\index.js
加载,而无需任何额外的魔术-捆绑包将转换为适当的节点兼容模块格式。
感谢Discord上的Sapper开发人员在回答此问题方面的帮助。