我在NodeJS中有一个Apollo Server,Graphql等应用程序。我想使用PM2将索引像服务一样,因此,当我关闭控制台时,它不会停止。
当我执行npm start时,服务器启动完美。这是我从package.json开始的
“开始”:“ nodemon ./index.js --exec babel-node -e js”,
如果我执行节点index.js,则会出现此错误。
/home/ubuntu/react/desafio/servidor/index.js:1
import express from 'express';
^^^^^^^
SyntaxError: Unexpected identifier
at Module._compile (internal/modules/cjs/loader.js:721:23)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:829:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)
这是我的index.js代码
import express from 'express';
import { ApolloServer, AuthenticationError } from 'apollo-server-express';
import { typeDefs } from './data/schema';
import { resolvers } from './data/resolvers';
import jwt from 'jsonwebtoken';
import dotenv from 'dotenv';
import db from "./models";
dotenv.config({path:'variables.env'});
const cors = require('cors');
const app = express();
// enable cors
// app.use(cors());
const addToken = async (req) =>{
}
const server= new ApolloServer({
typeDefs,
resolvers
});
server.applyMiddleware({app});
app.listen({port:9000},()=> console.log(`Server Corriendo http://localhost:9000${server.graphqlPath}`));
我在做什么错了?
答案 0 :(得分:1)
节点index.js 将引发错误,因为您的代码位于 ES6 中,要成功运行您的代码,您将不得不使用babel-node来运行它,它将进行编译到 ES5 。 babel-node带有babel-cli,您必须安装它。
“ ./index.js --exec babel-node -e js” 正是为了将 ES6 编译为 ES5
Babel帮助将我们的代码从ES6转换为ES5。有一些ES6 我们的浏览器和节点尚不了解的功能,以及较旧的功能 浏览器不了解ES6代码,因此我们使用babel来编译我们的 编码到ES5,以便旧浏览器和新浏览器都能理解。
答案 1 :(得分:0)
虽然导入确实是ES6的一部分,但不幸的是,默认情况下NodeJS尚不支持导入,并且最近才在浏览器中获得支持。
检查此node import vs require
在node 9 **中,它在标志后面启用,并使用.mjs扩展名**
node --experimental-modules my-app.mjs
您可以使用require语句:
const express = require("express");
如果您真的想在NodeJS中使用ES6 / 7的新功能,则可以使用Babel对其进行编译