【问题标题】:Sendgrid import issue in MeteorMeteor 中的 Sendgrid 导入问题
【发布时间】:2017-09-29 08:53:09
【问题描述】:

我正在尝试在 Meteor 中使用sendgrid npm 包(在服务器上):

const sendgridMail = require('@sendgrid/mail');

不断收到此错误:

(STDERR) packages\modules.js:961
(STDERR) const {
(STDERR)       ^
(STDERR)
(STDERR) SyntaxError: Unexpected token {
(STDERR)     at Object.exports.runInThisContext (vm.js:53:16)
(STDERR)     at D:\myProject\.meteor\local\build\programs\server\boot.js:331:30
(STDERR)     at Array.forEach (native)
(STDERR)     at Function._.each._.forEach (C:\Users\user1\AppData\Local\.meteor\packages\meteor-tool\1.5.2\mt-os.windows.x86_32\dev_bundle\server-lib\node_modules\underscore\underscore.js:79:11)

有什么解决办法吗?

更新: package.json 包含以下依赖项:

"dependencies": {
    "@sendgrid/client": "^6.1.4",
    "@sendgrid/mail": "^6.1.4",
    "babel-runtime": "^6.20.0",
    "bcrypt": "^1.0.2",
    "body-parser": "^1.17.2",
    "card": "^2.3.0",
    "google-auth-library": "^0.10.0",
    "googleapis": "^21.3.0",
    "meteor-node-stubs": "~0.2.4",
    "moment": "^2.18.1",
    "pnotify": "^3.2.0",
    "shortid": "^2.2.8",
    "simpl-schema": "^0.3.1",
    "stripe": "^4.24.0"
}

【问题讨论】:

  • 请出示您的package.json
  • 而且,可以肯定的是,当你删除这个require() 时,错误就会消失,对吧?
  • 是的,去掉 require() 后,它工作正常

标签: meteor sendgrid sendgrid-api-v3


【解决方案1】:

我就是这样用的,发现效果很好。

import sendgridModule from 'sendgrid';

let SEND_GRID_API_KEY = '';
try {
  SEND_GRID_API_KEY = Meteor.settings.env.SEND_GRID_API_KEY;
} catch (e) {
  // no-op
}
const sendgrid = sendgridModule(SEND_GRID_API_KEY);

我认为使用import 而不是require 是首选,它现在可以用于条件导入

【讨论】:

  • 您应该在try 块中的语句末尾添加.valueOf()。这样,您将捕获 undefined/nullMeteor.settings.env.SEND_GRID_API_KEY 值。
  • 我认为这适用于 sendgrid api v2,但在 v3 中,他们将其拆分为多个模块。如果您查看 github 上的代码,@sendgrid/mail 模块似乎没有命名导出(只有默认导出):github.com/sendgrid/sendgrid-nodejs/tree/master/packages/mail
【解决方案2】:

问题是SendGrid SDK v6requires Node.js version 6 and higher,但Meteor中捆绑的是4.8.4

$ meteor node --version
v4.8.4

正如this issue 中所述,更新 Node.js 会有所帮助,但显然不能用 Meteor 完成。

我建议你使用sendgrid npm package,这个works fine with Node.js v4

【讨论】:

  • 谢谢 - 这可能是问题所在,尽管我不确定我是否理解根本问题...import/require 应该在节点 4 和 6/8 中都有效。 (如果有直接的版本检查,那可能会输出一条指示“版本不匹配”的消息,不是吗?)
  • @ASX 问题在于对象解构和node 4 doesn't support that
猜你喜欢
  • 2017-05-09
  • 2016-07-22
  • 2013-11-24
  • 1970-01-01
  • 2020-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-23
相关资源
最近更新 更多