【发布时间】:2022-01-21 09:17:02
【问题描述】:
我正在使用流星,并且想要一个仅用于激活服务器端代码的 babel 插件。是否可以通过 babelrc 配置或直接在 babel 插件中完成?类似的东西
if(isServer) { //Do your thing only for server sided code}
--编辑:
为了更好的描述,我有以下例子:
import HelloWorld from "/imports/components/HelloWorld";
export const ROUTES = [
{
label: "Test",
path: "/TEST",
role: ["test.view"],
component: HelloWorld, //Render für Route
},
]
现在我想在双方(服务器和客户端)上使用此代码。在服务器端我不能使用这个导入,因为它会导致一些错误。对我来说,最好简单地过滤路由中的导入线和组件线。因此,我想在 babel 插件中区分服务器和客户端。
【问题讨论】:
-
我假设你已经知道
Meteor.isServer。你能详细说明为什么你特别需要 babel 来处理这个问题吗? -
Meteor.isServer 在 babel 插件中不可用。我想用代码块过滤一些导入,我只需要在客户端,而不是在服务器端。因此我需要在我的 babel 插件或配置中进行这种区分。
-
通过正确的导入结构,在大多数情况下应该很容易区分仅客户端代码和仅服务器代码。在更难的情况下,将仅客户端代码与服务器应用程序捆绑在一起并没有什么坏处,前提是您使用
Meteor.isClient保护它。相反(防止仅服务器代码被发送到客户端),您可以使用动态导入并将导入放在server文件夹中。那么所有的case都覆盖了,不用折腾Babel了。 -
根据您的描述,动态导入绝对是可行的方法,甚至还有客户端延迟加载的额外好处,前提是您的服务器代码不需要访问
component键。跨度> -
@ghybs 你是对的。感谢您的意见,用动态导入重建我的用例。