remax icon indicating copy to clipboard operation
remax copied to clipboard

要不要把 remax/macro 下的内容并入 remax?

Open arniu opened this issue 3 years ago • 5 comments

问题描述

remax/macro 下包含的是基于 babel-plugin-macros 的宏。

对于 remax 用户来讲,这属于实现层面的东西,似乎不应当反映到用户接口上。

用户使用 useQueryusePageInstanceusePageEvent 的时候,还要思考哪些来自 remax,哪些 remax/macro,很不应该啊。

arniu avatar Oct 09 '21 11:10 arniu

macro 的包名必须是 macro 结尾,这是 babel-plugin-macros 的限制。

yesmeck avatar Oct 09 '21 15:10 yesmeck

不熟悉 babel 配置,很惭愧问了这么个业余问题。

babel-plugin-macros 文档,是有这个限制。不过,据代码,是可以自定义 isMacrosName 的。

这是不是意味着,通过手动标注进而规避这个限制?

arniu avatar Oct 10 '21 17:10 arniu

我猜这个 isMacrosName 并不能满足需求, 因为这个 isMacrosName 参数是 import 的 source。也就是说如果写成这样的话:

import { useQuery } from 'remax';

isMacrosName 拿到的参数是 remax,并不能区分出 useQuerymacro

yesmeck avatar Oct 11 '21 02:10 yesmeck

import { useQuery, usePageEvent } from 'remax';

增加一个 pre 阶段的 rule,使用 babel-loader 将以上代码转化为(不能与 babel-plugin-macros 在同一个 loader 中)

import { useQuery } from 'remax';
import { usePageEvent } from 'remax/macro';

noyobo avatar Oct 12 '21 02:10 noyobo

import { useQuery, usePageEvent } from 'remax';

增加一个 pre 阶段的 rule,使用 babel-loader 将以上代码转化为(不能与 babel-plugin-macros 在同一个 loader 中)

import { useQuery } from 'remax';
import { usePageEvent } from 'remax/macro';

其实能这样做的话就没必要用 macro 了,直接在 babel 插件里处理掉 usePageEvent 就行,要考虑的是这种情况怎么处理:

import * as remax from 'remax';

remax.usePageEvent()

yesmeck avatar Oct 12 '21 05:10 yesmeck