不能在模块外使用 import 语句
Cannot use import statement outside modules
我正在将 NextJS 与 typescript、mongo Atlas、mongoose、node 和 express 一起使用。
我在 运行 节点 pages/server 时收到以下错误:
我已经上传了我的 package.json 文件并添加了 babel
import express from 'express'; ^^^^^^
SyntaxError: Cannot use import statement outside a module
at wrapSafe (internal/modules/cjs/loader.js:1072:16)
at Module._compile (internal/modules/cjs/loader.js:1122:27)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)
at Module.load (internal/modules/cjs/loader.js:1002:32)
at Function.Module._load (internal/modules/cjs/loader.js:901:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
at internal/main/run_main_module.js:18:47
这是我的 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"
}
自 Node v12 起,您可以使用 .mjs
扩展或在 package.json
中设置 "type": "module"
。
并且您需要 运行 带有 --experimental-modules
标志的节点。
node --experimental-modules server.mjs
您可以查看
或者您可以在项目的根目录中创建 .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
或者您可以 运行 使用 npm start 将以下代码添加到您的 package.json
文件:
"scripts": {
"start": "babel-node server.js"
}
媒体上有一个教程 link 用于设置 Next.js 使用自定义 Express 服务器 + Typescript,这对您很有帮助。
"scripts": {
"start": "babel-node server.js"
}
上面的添加对我有用
以下解决方案对我有用;
安装需要的包
npm install 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 是您的文件。
希望这有效:)
这是基于ts-next-express的解决方案。
npm i --save ts-node
为 express 创建另一个配置文件,因为节点正在使用 common.js 模块,但是如果您检查 tsconfig.json
,您将看到:"module": "esnext"
tsconfig.server.json
{
"extends": "./tsconfig.json",
"compilerOptions": {
"module": "commonjs",
"outDir": "dist",
"noEmit": false
},
"include": ["server"]
}
设置脚本如下:
"start": "ts-node --project tsconfig.server.json server.ts"
我遇到了同样的错误“SyntaxError: Cannot use import statement outside a module”,首先我添加了 tye : module 但仍然面临另一个错误。最后,它对我有用,问题是我正在 运行 宁我的 Driver.js 文件,这就是为什么我遇到这个问题。我 运行 我的 Driver.ts 文件对我来说工作正常。
enter image description here
但是在 运行 我的扩展名为 .ts 的文件之后它的工作。
enter image description here
我 index.ts 从我的 schema.js 文件中导入了一个导出的变量。
我正在这个 schema.js 文件
中导入
这是第二次导入导致 'Cannot use import statement outside modules'.
最后 将文件从 schema.js 重命名为 schema.ts 解决了问题。\
我正在将 NextJS 与 typescript、mongo Atlas、mongoose、node 和 express 一起使用。
我在 运行 节点 pages/server 时收到以下错误: 我已经上传了我的 package.json 文件并添加了 babel
import express from 'express'; ^^^^^^
SyntaxError: Cannot use import statement outside a module at wrapSafe (internal/modules/cjs/loader.js:1072:16) at Module._compile (internal/modules/cjs/loader.js:1122:27) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10) at Module.load (internal/modules/cjs/loader.js:1002:32) at Function.Module._load (internal/modules/cjs/loader.js:901:14) at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12) at internal/main/run_main_module.js:18:47
这是我的 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"
}
自 Node v12 起,您可以使用 .mjs
扩展或在 package.json
中设置 "type": "module"
。
并且您需要 运行 带有 --experimental-modules
标志的节点。
node --experimental-modules server.mjs
您可以查看
或者您可以在项目的根目录中创建 .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
或者您可以 运行 使用 npm start 将以下代码添加到您的 package.json
文件:
"scripts": {
"start": "babel-node server.js"
}
媒体上有一个教程 link 用于设置 Next.js 使用自定义 Express 服务器 + Typescript,这对您很有帮助。
"scripts": { "start": "babel-node server.js" }
上面的添加对我有用
以下解决方案对我有用;
安装需要的包
npm install 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 是您的文件。
希望这有效:)
这是基于ts-next-express的解决方案。
npm i --save ts-node
为 express 创建另一个配置文件,因为节点正在使用 common.js 模块,但是如果您检查 tsconfig.json
,您将看到:"module": "esnext"
tsconfig.server.json
{
"extends": "./tsconfig.json",
"compilerOptions": {
"module": "commonjs",
"outDir": "dist",
"noEmit": false
},
"include": ["server"]
}
设置脚本如下:
"start": "ts-node --project tsconfig.server.json server.ts"
我遇到了同样的错误“SyntaxError: Cannot use import statement outside a module”,首先我添加了 tye : module 但仍然面临另一个错误。最后,它对我有用,问题是我正在 运行 宁我的 Driver.js 文件,这就是为什么我遇到这个问题。我 运行 我的 Driver.ts 文件对我来说工作正常。 enter image description here
但是在 运行 我的扩展名为 .ts 的文件之后它的工作。 enter image description here
我 index.ts 从我的 schema.js 文件中导入了一个导出的变量。
我正在这个 schema.js 文件
中导入
这是第二次导入导致 'Cannot use import statement outside modules'.
最后 将文件从 schema.js 重命名为 schema.ts 解决了问题。\