Javascript SyntaxError:导入声明只能出现在模块的顶层。使用express,无网页包

Javascript SyntaxError:导入声明只能出现在模块的顶层。使用express,无网页包,javascript,node.js,ecmascript-6,Javascript,Node.js,Ecmascript 6,我正在尝试在前端脚本中导入npm模块。它是说模块必须在顶层才能导入,但从我所知,它是在顶层。也许我的网络服务器弄乱了我的代码。我不确定 代码现在很难看,因为我正试图把一切都安排好 我已经试过了 scripts.js 从“axios”导入axios; 函数getQueryStringValue(键){ 返回decodeURIComponent(window.location.search.replace)(新的RegExp(“^(?:.[&\\?]”+encodeURIComponent(ke

我正在尝试在前端脚本中导入npm模块。它是说模块必须在顶层才能导入,但从我所知,它是在顶层。也许我的网络服务器弄乱了我的代码。我不确定

代码现在很难看,因为我正试图把一切都安排好

我已经试过了


scripts.js

从“axios”导入axios;
函数getQueryStringValue(键){
返回decodeURIComponent(window.location.search.replace)(新的RegExp(“^(?:.[&\\?]”+encodeURIComponent(key).replace(/[\\.\+\*]/g,\\\$&”)+”(?:\=([^&]*)?)?*,“i”),“$1”);
}  
const query=getQueryStringValue('code');
班级钟声{
建造师(代码){
this.code=代码;
};
异步登录(){
const response=wait axios.post('url'{
“客户id”:“,
“客户机密”:“,
“授予类型”:“,
“重定向uri”:”https://localhost:3000',
'code':此为.code
});
控制台日志(响应);
}
测试(){
console.log(此.code);
}
}
如果(查询){
const client=新蜂鸣音(查询);
client.logIn();
};
var express=require('express'))
var fs=require('fs')
var https=require('https')
var app=express()
const path=require('path');
const publicPath=path.join(_dirname,../public');
常数端口=3000;
应用程序使用(express.static(publicPath));
应用程序获取(“*”,(请求,请求)=>{
res.sendFile(path.join(publicPath,'/index.html');
});
https.createServer({
key:fs.readFileSync(path.join(uu dirname+'/ssl/server.key')),
cert:fs.readFileSync(path.join(uu dirname+'/ssl/server.cert'))
},app)
.听(3000,函数(){
console.log('示例应用程序在端口3000上侦听!转到https://localhost:3000/')
});
我希望能够导入npm模块

从“axios”导入axios

裸模块导入在浏览器中不起作用。您需要使用可由web服务器提供服务的文件的相对路径(而不仅仅是由
node\u modules
中的包导出的NPM包名/模块,而不是服务目录),或者是一个工具链,它可以使用提供的项目根生成相对路径/从
节点_模块
拉入代码到一个包中

它是说模块必须在顶层才能导入,但从我所知,它是在顶层


您没有提供完整的设置,但是使用隐含的层次结构,我得到
uncaughttypeerror:解析模块说明符“axios”失败。在Chrome中,相对引用必须以“/”、“/”或“./”
开头,这与上述问题一致。

一种快速而肮脏的方法是使用cdn:

 <script src="https://unpkg.com/axios/dist/axios.min.js"></script>

将它放在JavaScript标记上方的html文件中




花了两个小时终于找到了解决方案,你需要做的第一件事就是

npm i parcel-bundler -D
然后package.json添加以下两行代码

"scripts": {
"dev": "parcel index.html",
"build": "parcel build index.html"
}
最后

npm run dev. 

如果您仍然有问题,请帮我省下这么多时间。

在以前的项目中从未遇到过这个问题,甚至在部署到web服务器时也从未遇到过。已尝试从“../../node_modules/axios/index”导入axios;我快速查看了axios(我从未使用过),它没有导出ES模块。它本机使用CommonJS,并使用Webpack生成与AMD兼容的发行版。您需要生成自己的ES模块分发版,或者使用现有的AMD导入。据我所知,您也没有为
节点\u模块
目录提供服务,您的导入需要解析为服务器可以提供的文件名-缺少扩展名可能是一个问题。似乎有一些其他的问题,不能复制没有你的项目是可用的。
npm run dev.