前端如何获得某个函数的完全实现? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
vision1900
V2EX    Javascript

前端如何获得某个函数的完全实现?

  •  
  •   vision1900 2022 年 9 月 6 日 3003 次点击
    这是一个创建于 1313 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目中前端实现了某个复杂的渲染逻辑(渲染的结果是字符串,可以理解是多字段的复杂组装),现在要把这个渲染逻辑挪到后端

    由于渲染逻辑比较复杂,如果后端独立实现这个渲染逻辑,相当于一件事情做了两遍,未免太花时间

    所以现在需要把前端的渲染逻辑整理一下,直接把相关函数给到后端使用

    但是前端这个函数调用了其他的好多子函数,试了一下直接使用 Function.prototype.toString,但结果并不能包含它所依赖的子函数的函数体。

    想来请教下前端如何能够能够完整的输出这个渲染函数呢?可以是一个巨大无比的函数,也可以是一个文件里面好多函数,但要保证函数间的依赖完整

    FYI: 前端用的是 webpack 做打包,语言是 typescript

    12 条回复    2022-09-06 21:47:16 +08:00
    vision1900
        1
    vision1900  
    OP
       2022 年 9 月 6 日
    后端用的也是 JS ,所以可以直接调用
    lisongeee
        2
    lisongeee  
       2022 年 9 月 6 日
    如果有递归调用,你准备如何转这个函数的字符串呢?
    zcf0508
        3
    zcf0508  
       2022 年 9 月 6 日 via Android
    单独写一个入口让 webpack 打包呢
    AV1
        4
    AV1  
       2022 年 9 月 6 日
    既然前后端都用 JS ,都是 ES 模块,那么直接把代码拷过去不行?
    fstar
        5
    fstar  
       2022 年 9 月 6 日
    做成 monorepo 吧,或者把公用的代码做成一个 npm 包
    Envov
        6
    Envov  
       2022 年 9 月 6 日
    不知道你们 webpack 是怎么配置的,如果有配置文件可以在哪个文件的基础上把 webpack 的入口和出口改一下就可以把那个函数单独编译出来了
    ```
    //webpack.config.js
    module.exports = {
    entry: './src/function-name.js'
    output: {
    filename: 'function-name.js',
    },
    };

    ```
    npx webpack build --config ./webpack.config.js --stats verbose
    zckevin
        7
    zckevin  
       2022 年 9 月 6 日
    同样也是爬虫行业的难题之一
    vision1900
        8
    vision1900  
    OP
       2022 年 9 月 6 日
    @zcf0508 @Envov 这个应该可行
    vision1900
        9
    vision1900  
    OP
       2022 年 9 月 6 日
    @DOLLOR 这个可能是保持代码可读性和模块化最好的方法,但是函数可能有多层依赖,手动去把依赖关系理清有点费时间。况且前端用的某个 npm 包后端可能没安装也不想安装
    vision1900
        10
    vision1900  
    OP
       2022 年 9 月 6 日
    @fstar monorepo 花费的精力太大,前后端一直是完全分离的,不同的人负责。发布 npm pacakge 同样面临把这些函数(可能是多层依赖)手动挑出来的过程
    zhw2590582
        11
    zhw2590582  
       2022 年 9 月 6 日
    除了手动去分离出来,我也想不出更好的办法了
    musi
        12
    musi  
       2022 年 9 月 6 日
    为了后面的可维护性感觉还是拆出去比较好
    万一前端哪天动了其中的一个依赖,用的是浏览器宿主环境的方法
    这时候你在放到 node 里跑就报错了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     852 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 21:46 PVG 05:46 LAX 14:46 JFK 17:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86