【问题标题】:Why Spread syntax throwing error in nodejs为什么在nodejs中传播语法抛出错误
【发布时间】:2019-05-21 14:46:51
【问题描述】:

我正在使用此代码创建一个文档。哪个按预期工作。

await Promise.all(
  payload.exercises.map(async(exercise) => {
      exercise.user = user
      exercise.workoutName = payload.workoutName
      await Exercise.create(exercise)
  })
)

但为了优化代码,我想使用带有 exercise 对象的扩展语法

await Promise.all(
  payload.exercises.map(async(exercise) => {
      await Exercise.create({ ...exercise, user, workoutName: payload.workoutName })
  })
)

但是当我编译它时,它会抛出错误Unexpected token (58:36)

有人可以帮我解释一下为什么我不能在后端使用它,而可以简单地在前端使用它reactjs

.babelrc 文件

{
  "presets": [
    ["env", {
      "targets": {
        "node": "11.5.0"
      }
    }]
  ],
  "env": {
    "test": {
      "plugins": ["istanbul"]
    }
  }
}

package.json

{
  "main": "index.js",
  "scripts": {
    "start:dev": "nodemon ./src/index.js",
    "start": "npm run build && node ./build/index.js",
    "build": "babel src -d build -s --source-maps --copy-files",
    "seed": "babel-node ./seeders/index.js",
  },
  "dependencies": {
    "@sendgrid/mail": "^6.2.1",
    ...
  },
  "devDependencies": {
    "async": "2.3.0",
    "babel-cli": "6.24.0",
    "babel-core": "6.24.0",
    "babel-eslint": "7.2.1",
    "babel-plugin-istanbul": "4.1.1",
    "babel-polyfill": "6.23.0",
    "babel-preset-env": "^1.2.2",
    "babel-preset-node6": "11.0.0",
    "chalk": "1.1.3",
    "chance": "1.0.6",
    "eslint": "3.19.0",
    "eslint-config-walmart": "1.2.2",
    "eslint-plugin-filenames": "1.1.0",
    "eslint-plugin-import": "2.2.0",
    "lab-babel": "1.1.1",
  }
}

【问题讨论】:

    标签: javascript node.js reactjs object


    【解决方案1】:

    坦率地说:我不太确定 Babel v6 中的 Babel 配置有什么问题。可能是与从 v6 到 v7 的转换相关的 npm 模块存在一些问题,尽管我认为所有的命名更改都处理了这个问题。我不再使用 Babel v6。

    复制您的问题后,我已经能够使用 Babel v7 解决它。方法如下:

    1. 我从devDependencies 中删除了package.json 中的所有babel 条目,所以它看起来像这样:

      "devDependencies": {
        "async": "2.3.0",
        "chalk": "1.1.3",
        "chance": "1.0.6",
        "eslint": "3.19.0",
        "eslint-config-walmart": "1.2.2",
        "eslint-plugin-filenames": "1.1.0",
        "eslint-plugin-import": "2.2.0",
        "lab-babel": "1.1.1"
      }
      
    2. 完全删除node_modules

    3. 重新创建node_modules

      npm 安装
    4. 已安装 Babel v7 (遗憾的是,当前声称适用于 v7.1.0 的文档的 CLI 安装行不正确,我有 filed an issue

      npm install --save-dev @babel/core @babel/cli @babel/preset-env

      ...这给了我这些devDependencies

      "devDependencies": {
        "@babel/cli": "^7.2.3",
        "@babel/core": "^7.2.2",
        "@babel/preset-env": "^7.2.3",
        "async": "2.3.0",
        "chalk": "1.1.3",
        "chance": "1.0.6",
        "eslint": "3.19.0",
        "eslint-config-walmart": "1.2.2",
        "eslint-plugin-filenames": "1.1.0",
        "eslint-plugin-import": "2.2.0",
        "lab-babel": "1.1.1"
      }
      
    5. 确保.babelrc 已设置为使用新的@babel/env

      {
        "presets": [
          ["@babel/env", {
              targets: {
                  "node": "11.5.0"
              }
          }]
        ],
        "env": {
          "test": {
            "plugins": ["istanbul"]
          }
        }
      }
      

    然后,npm run build 按预期工作。扩展语法被单独保留(因为 Node v11.5.0 原生支持它)。

    为了确定,由于您的问题的早期版本使用了 "node": 4.34.3 应该用引号括起来,顺便说一句),我切换到它,它工作得很好,转换了传播语法(和 @ 987654335@/await 和很多其他东西,因为 Node.js v4.3 真的已经过时了)。

    【讨论】:

    • 它更新了我的.babelrc 文件{ "presets": [ "env", "react", "stage-0" ], "plugins": [ "transform-class-properties", "transform-decorators", "transform-react-constant-elements", "transform-react-inline-elements" ] } 不知道为什么会这样以及它的作用。你能指导我看一些我可以参考的关于 babel 文件的文档
    • @Profer - 我很高兴能够提供帮助。 :-) 不过,您评论的答案版本不太有效(对我来说,无论如何,一旦我在您上面提到的.babelrc 更改后尝试返回您的配置)。不过,我现在已经更新了一些确实有效的东西。编码愉快!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多