我正在使用NextJS与typescript,mongo Atlas,mongoose,node和Express。
当我运行node Pages/Server时,我收到以下错误:我已经上载了我的package.json文件,并且还添加了babel
从“express”导入express;^^^^^^
SyntaxError:不能在模块外部使用导入语句,位于wrapSafe(内部/modules/cjs/loader.js:1072:16)位于module._compile(内部/modules/cjs/loader.js:1122:27)位于object.module._extensions.js(内部/modules/cjs/loader.js:1178:10)位于module.load(内部/modules/cjs/loader.js:1002:32)位于function.module._load(内部
这是我的server.js代码:
import express from 'express';
import { connect, connection } from 'mongoose';
import morgan from 'morgan';
import path from 'path';
const app = express();
const PORT = process.env.PORT || 8080;
//Success
import routes from './routes/api.tsx';
const MONGODB_URI = 'xxx';
// const routes=require('./routes/api')
connect(MONGODB_URI ||'mongodb://localhost/success', {
useNewUrlParser: true,
useUnifiedTopology: true
});
connection.on('connected', () => {
console.log('Mongoose is connected');
});
const newBlogPost = new BlogPost(data); //instance of the model
app.use(morgan('tiny'));
app.use('/',routes)
app.listen(PORT, console.log(`Server is starting at ${PORT}`));
package.json文件
{
"name": "la-sheild",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"dev": "next",
"build": "next build",
"start": "babel-node server.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"@types/express": "^4.17.2",
"@types/mongoose": "^5.7.1",
"axios": "^0.19.2",
"concurrently": "^5.1.0",
"express": "^4.17.1",
"mongoose": "^5.9.1",
"morgan": "^1.9.1",
"next": "^9.2.2",
"node": "^13.8.0",
"react": "^16.12.0",
"react-dom": "^16.12.0"
},
"devDependencies": {
"@babel/core": "^7.8.4",
"@babel/preset-env": "^7.8.4",
"@babel/register": "^7.8.3",
"@types/node": "^13.7.4",
"@types/react": "^16.9.21",
"babel-cli": "^6.26.0",
"typescript": "^3.7.5"
},
"proxy": "http://localhost:8080"
}
从NodeV12开始,您可以使用.mjs
扩展名,也可以在package.json
中设置“type”:“module”
。
并且需要使用--experimental-modules
标志运行节点。
node --experimental-modules server.mjs
您可以查看SO链接
也可以在项目的根目录中创建.babelrc
文件。添加以下内容(以及您需要的任何其他babel预置,都可以添加到此文件中):
{
"presets": ["env"]
}
使用以下方法安装babel-preset-env
npm install babel-preset-env
npm install babel-cli -g
# OR
yarn add babel-preset-env
yarn global add babel-cli
现在,转到server.js
文件所在的文件夹,然后
运行使用:
babel-node fileName.js
或者,您可以通过向package.json
文件中添加以下代码来使用npm start运行:
"scripts": {
"start": "babel-node server.js"
}
有一个使用自定义Express Server+Typescript在介质上设置Next.js的教程链接,对您非常有帮助。
下面的解决方案对我有效;
>
安装所需的软件包
NPM安装nodemon@babel/core@babel/node@babel/preset-env-d
在工作目录中创建一个.babelrc文件,并在其中粘贴以下内容
{
"presets": [
"@babel/preset-env" ]
}
最后,将下面的代码添加到package.json中的“scripts”
中
“dev”:“nodemon-exec babel-node server.js”
在本例中,server.js是您的文件。
希望这能起作用:)