如果不使用 node npm 仅在 index.html 构建一个简单的 web 应用, 是否可行? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
ninvfeng
15D
V2EX    程序员

如果不使用 node npm 仅在 index.html 构建一个简单的 web 应用, 是否可行?

  •  
  •   ninvfeng
    PRO
    2023-02-27 19:31:18 +08:00 3826 次点击
    这是一个创建于 967 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 现在的大多前端项目一上来必须 npm install

    • 这就要求你得先装 node

    • 为了更好的 npm install, 你可能会装 yarn,cnpm, pnpm

    • 为了下得更快, 你找到了 nrm 这个快速换源的工具

    • 结果在安装的时候提示你 node 版本不对, 你为了维护不同的版本又装了 nvm 来管理 node 环境

    • 终于你运行起来了, 想要发布, 你还得 npm run build

    • 这还没开始呢, node_modules 就占好几百 M 了

    • 也不是说这种方式不好, 自己也一直这么用, 已经习惯了, 且页面多逻辑复杂的大项目不可避免

    • 但在做一些界面简单, 只有一两个页面的应用的时候是不是可以直接在一个 index.html 内完成呢

    • 比如产品介绍,搜索引擎主页,短链接生成, 图床之类

    • 如果这个思路可行, 有哪些库可以帮助更方便快速搭建起一个项目呢

    第 1 条附言    2023-02-27 21:21:49 +08:00
    并没有要回到原始时代的意思, 像 vue, tailwind css, axios 等主流的库都是有提供 cdn 的使用方式, 如果在一些相对简单场景下如果用一个 html 能完成, 然后开发部署比用 npm run 更简单, 那我觉得还是可以去探索一下这种方式
    45 条回复    2023-02-28 15:29:43 +08:00
    ChefIsAwesome
        1
    ChefIsAwesome  
       2023-02-27 19:36:15 +08:00
    ??
    echoless
        2
    echoless  
       2023-02-27 19:36:17 +08:00 via Android
    node 爹的第二个儿子 deno 已经给你准备好了
    duke807
        3
    duke807  
       2023-02-27 19:37:40 +08:00
    最简单的起服务器的方法(而且还支持 cgi ):busybox httpd -f -h . -v -p 8080

    -f 是不切后台,配合 -v 方便看打印信息

    -h 指定网站目录

    -p 指定端口,不加默认 80 端口


    如果想要 https ,还可以用 stunnel 反代到 80 端口
    duke807
        4
    duke807  
       2023-02-27 19:39:51 +08:00
    代码则用 vanilla js ,css 用 bulma ,文本编辑器手撸
    kdwnil
        5
    kdwnil  
       2023-02-27 19:41:17 +08:00 via Android
    什么返璞归真,这样做当然可以,不就是 vanillajs 嘛
    porea
        6
    porea  
       2023-02-27 19:42:27 +08:00
    vanilla js + bootstrap 够了吧 最多加个 jquery
    Mutoo
        7
    Mutoo  
       2023-02-27 19:45:48 +08:00 via iPhone
    当然可以 使用 unpkg cdn 引入各种 lib 就行了。在 codepen 上的 project 大多都是这么玩的
    codehz
        8
    codehz  
       2023-02-27 19:46:59 +08:00 via iPhone   2
    不仅可以,你还能直接用 npm 上的库
    使用 esm.sh 来引用
    用上熟悉的 import 语法
    (就是记得写 script type=module
    crysislinux
        9
    crysislinux  
       2023-02-27 19:49:07 +08:00 via Android
    抱怨前端这些东西的人就很奇怪。浏览器又没有不准你直接写。
    dudubaba
        10
    dudubaba  
       2023-02-27 19:55:04 +08:00
    肯定可以,就看你用不用了,国外的 bootstrap ,国内的 layui ,都是 jquery 时代流行的,现在也很多后端在用。前端其实是逼着 “花”,不花就落后了饭碗都没了。
    cmdOptionKana
        11
    cmdOptionKana  
       2023-02-27 19:58:23 +08:00
    当然可以,而且,对于大多数网站来说,jQuery 就足够好用了,vue/react 的优势不大。

    举个例子,这个 V2EX 的前端就是走传统的模式,挺好的。
    MMMMMMMMMMMMMMMM
        12
    MMMMMMMMMMMMMMMM  
       2023-02-27 20:01:54 +08:00
    我猜楼主是 GenZ
    PlG5sBkXD1ziLeGB
        13
    PlG5sBkXD1ziLeGB  
       2023-02-27 20:09:52 +08:00 via iPhone
    啊?!,难道你前端是从 npm 开始学的吗
    AV1
        14
    AV1  
       2023-02-27 20:15:57 +08:00
    纯 vanilla 开发,别用 jquery !

    你需要的不是哪些库来搭建项目,而是一个文本编辑器,最好是 vscode 。因为它可以自动提示代码,节约敲击代码时间。

    然后是一个浏览器,chrome 和 firefox 都行。

    别听上面的教你搭 http 服务器的,因为 file:/// 协议就能预览效果了,本地还搭 http 服务器都是多此一举!

    剩下的,就是上 MDN 查 API 了,无论是 web api ,js 特性,css 特性,html 特性,那里全都有了,别去看什么菜鸟教程。
    wqzjk393
        15
    wqzjk393  
       2023-02-27 20:18:10 +08:00 via iPhone
    直接 html js css 三件套,然后配置 nginx 就完事了
    seakingii
        16
    seakingii  
       2023-02-27 20:24:01 +08:00
    确实可以,而且从有 HTML 以来就是可以这么干的。
    你不怕乱的话,可以在一个 html 里集成 html , js ,css 代码。
    可以直接 CDN 引用 一些外部库。这样最终只有一个 HTML 文件,界面不复杂的话很方便。
    ninvfeng
        17
    ninvfeng  
    OP
    PRO
       2023-02-27 20:24:59 +08:00   1
    @duke807 还找了半天这个 vanilla js, 结果是原生 js
    echoless
        18
    echoless  
       2023-02-27 20:25:26 +08:00
    @echoless #2 看了别的回复 我发现我错了.

    楼主今天你对前端的理解要有质的飞跃了.
    duke807
        19
    duke807  
       2023-02-27 20:29:21 +08:00
    @ninvfeng2020

    http://vanilla-js.com/

    文本编辑器 gedit 手撸,用到第 3 方的库,我会下载第 3 方的库的 js 和 css 文件,加上对应版本号,和我自己写的 html js 一起发布。

    这些第 3 方的库通常可以 npm 安装,但是我一般不使用 npm 。
    ninvfeng
        20
    ninvfeng  
    OP
    PRO
       2023-02-27 20:30:47 +08:00
    @dudubaba @cmdOptionKana 还是希望能在这基础上用上主流的技术, 比如 vue3 也是可以通过 script 标签引入使用的
    cvooc
        21
    cvooc  
       2023-02-27 20:32:14 +08:00
    时代的眼泪呦
    AV1
        22
    AV1  
       2023-02-27 20:32:35 +08:00
    <h4>示例:手撸一个本地视频播放器,不用 node 、npm</h4>
    <br>
    <input type="file" accept="video/*">
    <br>
    <video controls></video>
    <script>
    void (function () {
    const fileEle = document.querySelector('input');
    const videoEle = document.querySelector('video');

    fileEle.Onchange= () => {
    const file = fileEle.files[0];
    const videoUrl = URL.createObjectURL(file);
    videoEle.src = videoUrl;
    videoEle.Oncanplaythrough= () => {
    videoEle.play();
    URL.revokeObjectURL(videoUrl);
    };
    };
    })();
    </script>
    duke807
        23
    duke807  
       2023-02-27 20:36:02 +08:00
    @DOLLOR

    本地 file:// 有很多限制,譬如写 pwa 程序,存储 indexed db ,还有很多其它的限制。。。

    又譬如测试 cgi 的 api 接口,通过 web 局域网上传下载文件之类的。。。

    busybox 内置的 httpd 甚至可以用于生产环境

    当然,能直接 file:// 没问题的时候,当然是直接把 html 文件拖拽到浏览器。。。
    xiangyuecn
        24
    xiangyuecn  
       2023-02-27 20:40:58 +08:00   1
    最低配置,只需要一个 notepad 就够了

    欢迎使用 HTML5 网页版 ACME 客户端 https://xiangyuecn.gitee.io/acme-html-web-browser-client/ACME-HTML-Web-Browser-Client.html

    本网页客户端(仅一个静态 HTML 网页文件)用于:向 Let's Encrypt 、ZeroSSL 等支持 ACME 协议的证书颁发机构,免费申请获得用于 HTTPS 的 SSL/TLS 域名证书( RSA 、ECC/ECDSA ),支持多域名和通配符泛域名;只需在现代浏览器上操作即可获得 PEM 格式纯文本的域名证书,不依赖操作系统环境( Windows 、macOS 都能用),无需下载和安装软件,无需注册登录,纯手动操作,只专注于申请获得证书这一件事,简单易用,非常适用于希望手动快捷申请获得证书的使用场景。

    本网页客户端仅一个静态 HTML 文件,不依赖其他任何文件;因此可以直接保存到你本地,即可通过浏览器打开。
    cmdOptionKana
        25
    cmdOptionKana  
       2023-02-27 20:44:33 +08:00
    @ninvfeng2020 你要是希望用主流技术,就不要抗拒 npm, webpack 那一堆东西,因为那些就是主流,而完全脱离 npm 取用 vue 等技术,这种玩法已经不是主流了。

    因此,你想清楚你要的是主流还是简单方便,如果重点是简单方便,真没必要用 vue 那些,类似 V 站这样的复杂度,用 jquery 方便极了,vue 带来不了任何好处。
    learnshare
        26
    learnshare  
       2023-02-27 20:45:33 +08:00   1
    前端始于 npm ?
    ninvfeng
        27
    ninvfeng  
    OP
    PRO
       2023-02-27 21:21:27 +08:00
    并没有要回到原始时代的意思, 像 vue, tailwind css, axios 等主流的库都是有提供 cdn 的使用方式, 如果在一些相对简单场景下如果用一个 html 能完成, 然后开发部署比用 npm run 更简单, 那我觉得还是可以去探索一下这种方式
    Pastsong
        28
    Pastsong  
       2023-02-27 21:26:30 +08:00
    10 年前的前端不都是抄起一个 index.html (更有可能是 index.php )就开始搞的 那有什么工程化的东西
    AyaseEri
        29
    AyaseEri  
       2023-02-27 21:55:40 +08:00
    偷偷告诉你,只要你建好文件夹,vscode 有个 server 插件,你连 nginx 都不需要就能开始搞开发了。
    然后祝你好运。
    Hanggi
        30
    Hanggi  
       2023-02-27 22:00:09 +08:00
    Node.js 出来之前就是这么做的呀?
    vruzo
        31
    vruzo  
       2023-02-27 22:44:10 +08:00 via Android
    冒昧问一下,楼主几年经验前端的
    HugoChao
        32
    HugoChao  
       2023-02-27 22:45:33 +08:00
    以前都这么干啊,但是经过无数人的验证,还是 node 下开发好
    zinete
        33
    zinete  
       2023-02-27 22:52:34 +08:00
    一看你就没有用 PS 切过图
    zhensjoke
        34
    zhensjoke  
       2023-02-27 22:53:59 +08:00 via iPhone
    我刚学那会 html 用记事本都可以撸。
    ninvfeng
        35
    ninvfeng  
    OP
    PRO
       2023-02-27 23:07:52 +08:00
    @vruzo 多年 PHP, 前端写的不多
    jeffwcx
        36
    jeffwcx  
       2023-02-27 23:09:02 +08:00
    我大学的时候就是这么干的呀,那时候就是 jQuery ,还写了一些 widget ,后面才慢慢有 node 的。我只想说,那时候真的乱来
    cyitao
        37
    cyitao  
       2023-02-27 23:14:28 +08:00
    小页面随便怎么写,上规模的应用必须上全套。如果没有打包的过程,代码模块化程度不够,屎山就堆起来了。打包给前端带来的是 sass 、模块化、代码压缩等等一系列的功能。
    molvqingtai
        38
    molvqingtai  
       2023-02-27 23:51:06 +08:00
    当然可以,你还可以使用 WebComponent 写原滋原味的组件化页面
    Q4h7388nR28s95fa
        39
    Q4h7388nR28s95fa  
       2023-02-28 00:11:26 +08:00   1
    可行,如果想使用 vue 的话,推荐我这个 https://github.com/dongnanyanhai/vue-web-loader-2

    可以在不使用前端工具(如 npm,webpack 等)的情况下,快速构建基于 Vue 的单页面应用,具有以下优点:依赖小、支持 vue 单页面组件、支持动态加载组件。
    horizon
        40
    horizon  
       2023-02-28 09:06:20 +08:00
    可是打包好后,就没 node_modules 什么事了啊 //
    sparkinglemon
        41
    sparkinglemon  
       2023-02-28 10:48:10 +08:00
    咋说呢,前端其实不管工具链怎么变,最后都是归结到 html+js+静态文件。
    即便是现代打包工具如 webpack 、vite ,也是把这些散落在项目各个文件里的资源“转换”到应该在的位置。
    Vue 这种可以通过 cdn 引入不假,但是确实写法上很别扭,
    楼主可以看看 alpine.js ,前一阵刚做了一个 php 模板的项目,实在是比较陈旧没法用 Vue/Reac ,硬着头皮用了 v2 的 alpine ,效果还不错。

    https://alpinejs.dev/
    hervey0424
        42
    hervey0424  
       2023-02-28 11:04:25 +08:00
    jquery 搞起啊
    wangtian2020
        43
    wangtian2020  
       2023-02-28 11:29:15 +08:00
    node 能有啥版本问题,自己不愿意去直面依赖包管理,估计你们项目还在用 node-sass 吧
    yuedun
        44
    yuedun  
       2023-02-28 14:26:38 +08:00
    用一个文件夹存放 index.html ,顶多再加上 css,js 。把文件夹塞到 nginx 默认 html 目录下
    CarryOnHxy
        45
    CarryOnHxy  
       2023-02-28 15:29:43 +08:00 via iPhone
    petitevue
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3407 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 92ms UTC 04:45 PVG 12:45 LAX 21:45 JFK 00:45
    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