NodeJs Npm Start有效,但节点index.js无效。语法错误:意外的标识符

时间:2019-07-30 04:50:11

标签: node.js express

我在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}`));

我在做什么错了?

2 个答案:

答案 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对其进行编译