V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Cbdy
V2EX  ›  Node.js

为什么不把后端也交给 webpack?

  •  
  •   Cbdy · 2018-08-04 23:13:02 +08:00 via Android · 16066 次点击
    这是一个创建于 2084 天前的主题,其中的信息可能已经有所发展或是发生改变。

    根据 Atwood 定律,大部分后端场景迟早也是 js 的天下。众所周知,ts 写起来是很爽的,所以如果前后端都是用 ts 写(比如前端 react+tsx,后端 koa ),一个普通的 webapp,完全可以前后端都通过 webpack 编译运行,开发的时候也可以只用一个类似 webpack-serve 这样的工具,代替原先的前后端两套开发架子(比如前端 webpack-serve,后端 nodemon )。

    这样在同一个代码仓库开发,一个功能从前写到后,同一套数据结构从前用到后,岂不是效率很高?

    73 条回复    2018-09-17 14:25:01 +08:00
    blanu
        1
    blanu  
       2018-08-04 23:15:34 +08:00 via iPhone
    关 webpack 鸟事?后端是可以用 webpack 打包运行,有必要?直接上 node lts 就有 es6 了,钓鱼贴吧。
    molvqingtai
        2
    molvqingtai  
       2018-08-04 23:20:08 +08:00
    相信我大前端有朝一日会一统江湖!
    Cbdy
        3
    Cbdy  
    OP
       2018-08-04 23:20:21 +08:00 via Android
    @blanu 我是认真的,我打算下周搞个类似的东西尝试一下,看看效果
    lihongjie0209
        4
    lihongjie0209  
       2018-08-04 23:27:35 +08:00
    笑笑不说话
    mhycy
        5
    mhycy  
       2018-08-04 23:27:54 +08:00
    打包意义在哪里?
    leafiy
        6
    leafiy  
       2018-08-04 23:28:16 +08:00 via Android
    做过此事,实无必要
    blanu
        7
    blanu  
       2018-08-04 23:28:51 +08:00 via iPhone
    @Cbdy 我还用 webpack 和 redux 给嵌入式设备( ruff )写过代码呢,为的是压缩体积和适配 es5,但是后端我真想不清楚 webpack 有什么用。

    如果追求前后端代码统一管理,你大可以放一个仓库,后端代码不走打包直接 node 运行
    blanu
        8
    blanu  
       2018-08-04 23:29:42 +08:00 via iPhone
    如无必要,勿增实体
    whypool
        9
    whypool  
       2018-08-04 23:31:10 +08:00
    deno 了解一下 直接可以运行 ts

    和 webpack 有什么关系
    jimliang
        10
    jimliang  
       2018-08-04 23:36:46 +08:00   ❤️ 2
    Sanko
        11
    Sanko  
       2018-08-04 23:38:17 +08:00 via Android   ❤️ 1
    求求你别搞新东西了,我学不动了
    ilgharkus
        12
    ilgharkus  
       2018-08-04 23:41:33 +08:00   ❤️ 1
    那我们还是让 C++统一天下吧(滑稽)
    Torpedo
        13
    Torpedo  
       2018-08-04 23:51:29 +08:00 via Android
    webpack,就像它的名字。给 web 打包的。
    然而后端一般 js 不用打包,直接引用各种 npm 包就可以了。也不用压缩合并
    rexer
        14
    rexer  
       2018-08-05 00:28:28 +08:00 via Android   ❤️ 1
    backpack 了解一下
    djyde
        15
    djyde  
       2018-08-05 00:39:40 +08:00
    不就是同构吗
    AllOfMe
        16
    AllOfMe  
       2018-08-05 00:51:03 +08:00   ❤️ 10
    前端用 webpack 是方便模块化压缩合并,是考虑到浏览器默认不支持运行 import require 等情况,而且图片 less 一堆东西合在一起给页面展示。
    你后端用 webpack 真正解决问题的是什么?模块化有个 node 就能跑起来了,而且我认为后端更加注重的应该是 SQL 性能和并发量控制,缓存,稳定性,设计模式这些东西,而不是一会 webpack 一会又这个那个打包工具,感觉意义并不是很大。
    前后端我认为是很难简单用个 webpack 就统一架构的,服务的对象都不一样,这怎么统一?而且不要希望 JS 能打遍天下无敌手(我无意黑 JS),多尝试多体会其他语言。

    ----------分割------------
    楼上说“求求别搞新东西了,学不动了“,我深有体会,这并不是说楼上偷懒没有学习精神,可能他就是认为”学了这个东西,没什么深度,过两三个月又被推翻,没有传统后端知识那么稳固耐用有深度“。他说的可能是后端 node,而不是前端。面对后端,其实一些公司并没有那么多机会给你尝鲜什么新工具,也不太可能会给你各类框架工具链天天重构项目,毕竟时间成本还有失败几率也是放在那里的,目的就是把事情做好。
    就 node 后端而言,我更希望能有一套比较普适的体系框架(如 Java 的 Spring 框架),能基于这个框架逐渐深入更多的工具链,让开发者能更快更好更稳定的实现接口,让 HTTP 访问速度更快,有更多类似 lodash 的 kit 方便逻辑集合运算,有 async/await 这种优化编码质量的东西。让 node.js 回归后端的本质,就是提供 HTTP 服务,并且有一套成熟完整的生态(而不是某个框架火了几个月又改超焕袋,这样真的没意思)
    吐槽完毕,当然你可以说我是嘴炮
    shijingshijing
        17
    shijingshijing  
       2018-08-05 00:53:05 +08:00
    我等着什么时候 js 能取代 VHDL 整个 CPU 出来。
    Cbdy
        18
    Cbdy  
    OP
       2018-08-05 00:58:54 +08:00 via Android
    @blanu 后端其实也希望使用 js 的方言( ts-loader ),静态类型写起来舒服,所以也需要编译,然后是后端也希望改完代码能够自动重启( nodemon ),同时,后端定义的数据结构、公共函数希望前后端都能用,webpack 正好都有这些功能
    Socket
        19
    Socket  
       2018-08-05 00:59:23 +08:00
    整天折腾些有的没的,真实的商业项目复杂度非常高不是你玩玩具搞毕业设计
    ETiV
        20
    ETiV  
       2018-08-05 01:02:41 +08:00
    后端需要的应该是加密…明文的代码不好部署给第三方
    Cbdy
        21
    Cbdy  
    OP
       2018-08-05 01:06:35 +08:00 via Android   ❤️ 1
    @AllOfMe 其实我的本职工作是 Java 后端,不过也用过 node 写过一些东西,Java 生态确实好,node 的生态乱糟糟的,不过 node 有他得天独厚的优势:JavaScript。我感觉 node 的技术债已经蛮严重了,起码 gyp 实在太难用。不过真的很好玩
    Mitt
        22
    Mitt  
       2018-08-05 01:38:44 +08:00 via iPhone
    @ETiV 参考 php
    ETiV
        23
    ETiV  
       2018-08-05 02:04:43 +08:00
    @Mitt 对,参考 PHP

    但还是没这环境,估计得给 nodejs 写扩展
    lolizeppelin
        24
    lolizeppelin  
       2018-08-05 02:49:45 +08:00 via Android   ❤️ 1
    根据 Atwood 定律,大部分后端场景迟早也是 js 的天下。



    233333
    Sparetire
        25
    Sparetire  
       2018-08-05 03:06:24 +08:00 via Android
    这勃式提问的风格真的不是来黑的?
    blanu
        26
    blanu  
       2018-08-05 03:50:11 +08:00 via iPhone
    @Cbdy ts-node 和你说的 nodemon 完全能满足了
    RqPS6rhmP3Nyn3Tm
        27
    RqPS6rhmP3Nyn3Tm  
       2018-08-05 04:38:31 +08:00 via iPhone
    前端用什么 js,迟早都是 C(WebAssembly)的天下
    (狗头
    laxenade
        28
    laxenade  
       2018-08-05 05:16:09 +08:00 via Android
    那不就是 meteor 了吗
    Cbdy
        29
    Cbdy  
    OP
       2018-08-05 07:19:36 +08:00 via Android
    @Mitt PHP 不一样 ,PHP 不是 JavaScript
    windfarer
        30
    windfarer  
       2018-08-05 07:39:51 +08:00 via Android
    你说的对
    kevinhwang
        31
    kevinhwang  
       2018-08-05 08:06:56 +08:00 via Android   ❤️ 3
    就凭 js 的残废语言还想做企业级业务逻辑啊? undefined:)
    mejee
        32
    mejee  
       2018-08-05 08:07:00 +08:00 via Android
    得了吧,可行,有用,但想一统江湖,妄想。后端不是运行在统一得浏览器环境,不同应用对各方各面都有不同要求。那么多语言那么多框架百花争妍多年都没出来个大统一,JS 显然基本不可能
    janxin
        33
    janxin  
       2018-08-05 08:15:23 +08:00
    是是是,JS 秒天秒地秒空气好了吧

    问过 Java 程序员同意了吗? XD
    vindurriel
        34
    vindurriel  
       2018-08-05 08:48:29 +08:00 via iPhone
    前后端统一这个野心并不算大 看看 GraphQL 人家要干掉后端
    owenliang
        35
    owenliang  
       2018-08-05 09:16:58 +08:00 via Android
    写前端的天天惦记写后端,这样很不专一啊
    yangxin0
        36
    yangxin0  
       2018-08-05 09:19:44 +08:00 via iPhone
    你拿 js 写个数据库试一试?
    dixeran
        37
    dixeran  
       2018-08-05 09:28:55 +08:00 via Android   ❤️ 1
    前端轮子一个接一个,没见有多少能上生产环境的😂
    SoulSleep
        38
    SoulSleep  
       2018-08-05 09:47:05 +08:00   ❤️ 1
    真给前端脸了?在自己的领域内你咋造轮子都没人理,作为后端开发来说,你们那些破玩意儿自己留着玩就行,别出来霍霍了好么 :xd
    xiaojunjor
        39
    xiaojunjor  
       2018-08-05 10:12:27 +08:00
    大部分后端场景迟早也是 js 的天下
    ???
    wwek
        40
    wwek  
       2018-08-05 10:31:15 +08:00   ❤️ 3
    拿了锤子,满世界都是钉子
    jrtzxh020
        41
    jrtzxh020  
       2018-08-05 11:40:28 +08:00 via iPhone
    ssr 了解一下。。
    deepkolos
        42
    deepkolos  
       2018-08-05 11:48:14 +08:00
    目测前后端对接接口会十分方便
    YenvY
        43
    YenvY  
       2018-08-05 12:18:33 +08:00 via iPad   ❤️ 1
    这帖子画风跟那个前端算程序员吗的贴子完全不一样嘛

    暴躁后端只在这里出现吗
    jiyinyiyong
        44
    jiyinyiyong  
       2018-08-05 12:45:02 +08:00   ❤️ 1
    前面有人在提 WebAssembly, 我想了下大概还真的可能以后基于 Node API 开发后端要用 Webpack.

    现在我们用 Node.js 开发直接发布源码, 原因在于 JavaScript 是动态语言, 而且我们不像一些苛刻的场景那样要求在服务端运行时候快速启动. 如果说这些条件改变了呢, 后端代码借助 WebAssembly 做多语言的混合开发了, 代码部署的时候为了安全或者为了快速启动不建议分发源码, 而是基于二进制的 WASM 文件?

    按这样想, 以后用 Webpack 建构后端代码很正常的事情, 就像 Java 程序编译上线不是很正常嘛. 当然这种事情不是一天两天的.

    至于说复用代码, 编译发布到服务器. 我现在用 ClojureScript 开发就是这样, 一套代码全都是 ClojureScript 前端浏览器, 后端 Node.js , 其中的 ClojureScript 部分完全可以复用的. 完成之后通过 shadow-cljs 分别给前端后端代码打包, 上传到 CDN 和服务器上更新服务. 阅读代码 https://github.com/Cumulo/cumulo-workflow .

    至于标题的为什么现在不搞? 目前基于 JavaScript 开发的话没有切实的需求啊, 大家都不想把事情搞复杂, 直接上传整个项目, 直接整个重启, 不觉得有问题, 当然是怎么维护简单怎么来的.

    你可以把我的 ClojureScript 项目跑起来看看, 因为 ClojureScript 语言的设计, 在开发环境和在生成环境, 由于开发环境代码包含标准库, 还有一些高阶的抽象, 实际上性能是有折扣的, 所以就需要建构过程同时做一些优化. 不过由于我的项目太小, 实际上也看不明显区别.
    zhzer
        45
    zhzer  
       2018-08-05 14:29:51 +08:00
    要打包就打包啊,后端又不要你编译啥,要一起打包不就一行代码的事?
    sagaxu
        46
    sagaxu  
       2018-08-05 14:31:02 +08:00 via Android
    因为后端不需要 js
    revol
        47
    revol  
       2018-08-05 14:46:01 +08:00
    其实后端(些其他语言的)根本看不起 JS 和 JS 的工具链好吧。。。连自举都做不到,别的就不谈了
    jiyinyiyong
        48
    jiyinyiyong  
       2018-08-05 14:58:53 +08:00
    @kevinhwang 帽子扣大了. 残废在哪倒是说说看
    jiyinyiyong
        49
    jiyinyiyong  
       2018-08-05 15:00:34 +08:00
    @revol 单纯说自举, JavaScript 明明是能做到的 https://github.com/jterrace/js.js
    Rorysky
        50
    Rorysky  
       2018-08-05 15:15:43 +08:00
    @janxin #33 让我们原谅 lz 的 naive
    fulvaz
        51
    fulvaz  
       2018-08-05 15:24:11 +08:00
    除了 ts->js 外, 其实没啥必要呀, 如果只是为了这个, github 上全是 boilerplate

    webpack 本质是对模块进行处理的工具, 但是 node 自带模块化.

    你说 ESModule 的话, 我理解可能比较肤浅, 我的理解是 ESM 最大的作用是结合 TreeShake 去除没使用的依赖, 对后端来说不存在包大小的问题.

    ----

    语言根本就不是个问题, 框架也是, 语言和框架脱离场景都是耍流氓, 咋搞得十字军东征一样乌烟瘴气.
    guolaopi
        52
    guolaopi  
       2018-08-05 16:19:06 +08:00
    日常撕。。。
    PHP:别说了 JS 是世界上最好的语言
    glues
        53
    glues  
       2018-08-05 16:21:20 +08:00
    前端造了这么多轮子,对于 99% 的项目来说,并没有比当年 jQuery 提高多少开发效率
    KuroNekoFan
        54
    KuroNekoFan  
       2018-08-05 17:27:50 +08:00 via iPhone
    看来国内做“纯后端”的开发者真的很看不起 js ……话说很好奇国外 nodejs 应用场景多不多呢,看到文章讲还是很广泛的
    hl
        55
    hl  
       2018-08-05 18:12:17 +08:00
    你还想干啥 😂😂😂
    pony279
        56
    pony279  
       2018-08-05 18:47:17 +08:00
    如果你真以为后端开发面临的主要困难是编程语言门槛的话

    可以马上开始自己造轮子啊,当下可是千载难逢的好机会
    CasualYours
        57
    CasualYours  
       2018-08-05 18:51:43 +08:00
    给我们留口饭吃吧。
    Phariel
        58
    Phariel  
       2018-08-05 18:54:15 +08:00 via iPhone
    大部分后端场景迟早也是 js 的天下

    高级黑?
    murmur
        59
    murmur  
       2018-08-05 19:16:55 +08:00
    楼主是认为后端 webpack 能解决你产品的加密问题么
    zhangyu911013
        60
    zhangyu911013  
       2018-08-05 19:17:13 +08:00 via Android
    wepack 主要是打包工具,后端不用打包,而且现在 node 用 weback 有很多坑,踩过一些
    zhzer
        61
    zhzer  
       2018-08-05 20:50:40 +08:00
    大家应该这样想,都用 ts 写前后端,是不是意味着前后端合并?那不是开了历史的倒车吗?

    真相就是,其实楼主是高端黑,恶政隐(告辞
    Cbdy
        62
    Cbdy  
    OP
       2018-08-05 22:06:27 +08:00 via Android
    @zhzer 你是不是对前后端分离有什么误解?前后端分离并非代码分离放到两个仓库
    simonguo
        63
    simonguo  
       2018-08-05 22:09:29 +08:00
    在开发过程中,为什么要前后端分离?
    wunonglin
        64
    wunonglin  
       2018-08-05 23:23:27 +08:00
    @simonguo 哈?
    tt67wq
        65
    tt67wq  
       2018-08-06 08:39:19 +08:00
    前端都这么跳了现在?
    sdrzlyz
        66
    sdrzlyz  
       2018-08-06 08:40:30 +08:00 via Android
    不需要 pack 啊。。。而且,为啥要 js/ts 搞后段?仅仅因为前端也用?告辞告辞
    tushankaka
        67
    tushankaka  
       2018-08-06 09:10:55 +08:00 via Android
    后端可以用 node,js,但 webpack 就没必要了。没必要黑 js 的。
    allgy
        68
    allgy  
       2018-08-06 10:36:13 +08:00
    兄弟你怕是对 webpack 有误解
    xuecat
        69
    xuecat  
       2018-08-06 13:57:17 +08:00
    同样,求求你们别更新了,劳资学不动了。
    滑稽。。。
    beny2mor
        70
    beny2mor  
       2018-08-06 14:35:11 +08:00
    对于一些 1m 大小差距就会影响性能,并且支持 js 的环境.... 可能有这种东西吧
    jerry4718
        71
    jerry4718  
       2018-08-08 09:16:16 +08:00
    整个后端,build 成一行 js 代码,顺便 uglify 一下,多捞啊
    chai2010
        72
    chai2010  
       2018-08-20 13:06:33 +08:00
    Atwood 定律已经完成任务了。以后是 Ending 定律:"Any application that can be compiled to WebAssembly, will be compiled to WebAssembly eventually."

    Ending 定律也称为终结者定律,它是 Ending 在 2016 年 Emscripten 技术交流会上给出的断言:所有可以用 WebAssembly 实现的终将会用 WebAssembly 实现。
    luvxy
        73
    luvxy  
       2018-09-17 14:25:01 +08:00
    @AllOfMe 我也是这样觉得,前端现在感觉太乱了,真想转后端
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1472 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 23:59 · PVG 07:59 · LAX 16:59 · JFK 19:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.