Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Nodejs运行js错误:无法在模块外部使用导入语句_Javascript_Node.js_Express_Node Modules - Fatal编程技术网

Javascript Nodejs运行js错误:无法在模块外部使用导入语句

Javascript Nodejs运行js错误:无法在模块外部使用导入语句,javascript,node.js,express,node-modules,Javascript,Node.js,Express,Node Modules,我无法运行节点src/index.js,因为它会抛出错误。 但是nodemon没问题。如何运行it的生产版本 PS D:\Development\server\Image hosting\node-express-server-rest-api-master> node src/index.js D:\Development\server\Image hosting\node-express-server-rest-api-master\src\index.js:2 import co

我无法运行节点src/index.js,因为它会抛出错误。 但是nodemon没问题。如何运行it的生产版本

PS D:\Development\server\Image hosting\node-express-server-rest-api-master> node   src/index.js
D:\Development\server\Image hosting\node-express-server-rest-api-master\src\index.js:2
import cors from 'cors';

SyntaxError: Cannot use import statement outside a module
这是一个非常简单的项目和文件:我尝试了“type”:“module”,但它抛出了新的错误。 这只是一个示例项目

package.json

{
"name": "node-express-server-rest-api",
"version": "0.1.0",
"description": "Node imgs hosting",
"scripts": {
    "start": "nodemon --exec babel-node src/index.js",
    "test": "echo \"No test specified\" && exit 0",
    "production": "NODE_ENV=production node src/index.js",
    "win-prod": "set NODE_ENV=production && node   src/index.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
    "@babel/core": "^7.11.6",
    "@babel/node": "^7.0.0",
    "@babel/preset-env": "^7.1.6",
    "@babel/register": "^7.0.0"
},
"dependencies": {
    "body-parser": "^1.19.0",
    "cors": "^2.8.5",
    "dotenv": "^8.2.0",
    "express": "^4.17.1",
    "follow-redirects": "^1.13.0",
    "mkdirp": "^1.0.4",
    "uuid": "^7.0.3"
  }
 }
index.js

require('dotenv/config');
import cors from 'cors';
import express from 'express';


import routes from './routes';
const bodyParser = require("body-parser");

const app = express();


app.use(cors());

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());


app.use((req, res, next) => {
// req.context = {
//     models,
//     me: models.users[1],
// };
next();
});


app.use('/upload', routes.upload);


app.listen(process.env.PORT, () =>
 console.log(`Example app listening on port ${process.env.PORT}!`),
);

我会把答案贴在这里

添加此模块:
npm i esm

在根文件夹下再添加一个文件 我将其命名为main.js:

require = require("esm")(module /*, options*/ )
module.exports = require("./src/index.js")
更改package.json启动脚本 由此:

 "win-prod": "set NODE_ENV=production && node -r src/index.js"
为此:

 "win-prod": "set NODE_ENV=production && node -r esm main.js"

如果查看开始脚本,您将看到它使用
babel节点运行。要部署它,您需要使用webpack或类似的解决方案,将模块捆绑到一个文件中。但是,您可以简单地使用
require()
来代替。您知道如何解决这个问题吗?无需代码拆分只需替换
从“cors”导入cors即可带有
const cors=require('cors'),与其他导入行相同。我还有另一个项目,该项目获得了大量导入。我不认为这是一个解决方案……是的,我也有很多使用
import
的项目,但它们是相应地设置的,因此使用
import
实际上是可行的。Classic node/express使用
require()
,您也可以在此处看到: