【问题标题】:Meteor build is importing server side code to clientMeteor build 正在将服务器端代码导入客户端
【发布时间】:2017-06-23 22:22:06
【问题描述】:

我的 Meteor 项目在 /imports 目录中有一个服务器端机密,它不应该发送给客户端。

在客户端查看源代码时,我注意到文件实际上已导入。

我搜索了我的项目目录,唯一可能发生的导入包含此代码在共享客户端/服务器的文件中:

if (Meteor.isServer) {
    import secret from '../imports/config/secret';
    // ...
}

我猜构建工具看到了导入并合并了它。

有没有办法解决这个问题?我需要使用这个文件中的秘密,但前提是 Meteor 在服务器端运行!


注意:请不要回答告诉我所有服务器端密钥等不应与构建一起发布。这不完全一样。

【问题讨论】:

    标签: meteor import build


    【解决方案1】:

    isServer 构造可防止代码在客户端上运行,但不会阻止提供这些字节。您表示文件本身在客户端和服务器之间共享,这是您的问题。

    您需要将该代码移动到仅提供给服务器的文件中。即在名为“server”的文件夹或其子文件夹中。

    来自https://guide.meteor.com/structure.html#special-directories

    客户端上未加载任何名为 server/ 的目录。如同 将您的代码包装在 if (Meteor.isServer) { ... } 中,客户端除外 甚至从未收到代码。任何您不想要的敏感代码 提供给客户端,例如包含密码的代码或 身份验证机制,应该保存在 server/ 目录中。

    【讨论】:

    • 好的。现在假设我仍然需要从服务于客户端和服务器的另一个文件中要求该文件(现在放置在服务器中),它会解决任何问题吗?
    • @dthree,这行不通。您将不得不做一些工作来拆分这些文件中的内容,或者甚至可能调用服务器来获取您需要的内容。没有看到实际代码很难说。
    • 好的,我明白了,这是有道理的。感谢您的帮助!
    猜你喜欢
    • 2019-08-13
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 2014-02-18
    相关资源
    最近更新 更多