我开源了一个能在浏览器上执行 npm 命令的在线代码编辑器 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
moment082
V2EX    程序员

我开源了一个能在浏览器上执行 npm 命令的在线代码编辑器

  •  1
     
  •   moment082 2023-08-30 15:23:11 +08:00 2483 次点击
    这是一个创建于 824 天前的主题,其中的信息可能已经有所发展或是发生改变。

    时隔两个月,我又基本写好了一个开源项目,这次给大家带来的是一个在线代码编辑器。

    在两个月前我发布了我的个人第一个项目 create-neat 脚手架,而这次的在线代码编辑器使用的构建工具就是基于这个脚手架搭建的。

    首先先上地址:

    Github 地址https://github.com/xun082/online-cooperative-edit

    在线预览https://online-edit.wangblogs.top/

    一、背景

    这个项目没什么特别的背景,首先就是好玩,其次就是好玩,再其次就是非常好玩。

    二、技术栈

    目前整个技术为纯前端,后期会添加后端,并且会实现在线协调编辑功能。

    • React 18
    • WebContainer
    • Typescript
    • Webpack

    三、效果展示

    当输入 URL 之后会看到如下界面:

    20230830140124

    首页的话功能点不多,还没有空写,只有一个逻辑处理,点击新建代码片段即可:

    20230830140246

    这里新建空白文档是直接打开编辑器,而 打开文件夹 则是选择本地文件,如下图所示:

    20230830140511

    选择特定文件之后会自动跳转到编辑页,如下图所示:

    20230830140722

    当进入到这个页面之后,你可以根据你要选择的项目,执行 npm 命令安装相对应的依赖包并运行起来,如下图所示:

    20230830140926

    以来安装完成之后,就可以启动项目了,执行项目中 package.json 中的启动命令 pnpm start:

    20230830141129

    效果成功展示。

    考虑到一些本地项目自带 prettier,在设置这里提供了一个全局的 prettier 代码格式化和一个可选的 prettier 配置:

    20230830141455

    在这里你可以选择你的 prettier 配置文件所在的目录地址,如果不需要使用的话,你可以配置一些全局的 prettier 配置。

    在这里还有一些就是文件的增删改操作:

    20230830141556

    还有一个就是你可以在终端里面执行 create-react-appcreate-vite 等脚手架工具,如下图所示:

    20230830142124

    项目创建成功,由于终端有点丑陋,还没有更改,暂时无法监听到什么时候命令执行完成,所以需要手动刷新一下文件目录:

    20230830142352

    image.png

    哈哈,项目成功启动。

    四、未来

    相关需求或者任务列表会在 issue 里面发布,感兴趣的朋友可以领取任务然后开发,我也会逐步完善 GitHub 上面的一些配置。

    后期会逐步完善这些功能和 ui 。

    会逐步添加一些重大功能,例如:

    • 下载文件到本地
    • 关联 Github 仓库
    • 在线协调编辑
    • 等等......

    靠着这个项目我是拿到了不少大厂的面试机会,虽然我菜并没有通过,但是这个项目会一直维护并且发扬光大的哈哈哈哈哈。并且会将这个项目作为毕业设计。

    五、如何贡献

    目前还没有说什么规范做到如何捐献,你想怎么捐献都可以,本人比较闲,看到没问题之后都会立即合并的。

    如果你正在使用这个项目或者对这个项目感兴趣,可以通过以下方式支持我,这也是一种贡献的方式:

    • Star 、Fork 、Watch 一键三连

    最后再贴一下项目地址:

    Github 地址https://github.com/xun082/online-cooperative-edit

    在线预览https://online-edit.wangblogs.top/

    13 条回复    2023-08-31 16:54:02 +08:00
    declandragon
        1
    declandragon  
       2023-08-30 15:54:06 +08:00
    看起来很牛逼,先 Star
    cheneydog
        2
    cheneydog  
       2023-08-30 16:16:54 +08:00   2
    比那个国产 VSCode 牛
    lisxour
        3
    lisxour  
       2023-08-30 16:24:49 +08:00
    和那些在线的 demo 托管网站有啥区别嘛,完完全全一样的功能
    moment082
        4
    moment082  
    OP
       2023-08-30 16:27:49 +08:00
    @lisxour 和 codepen 这些不同的是可以直接运行 npm,pnpm 命令
    musi
        5
    musi  
       2023-08-30 16:59:09 +08:00   1
    你这也是基于 webcontainer ,所以为啥不直接用 stackblitz
    moment082
        6
    moment082  
    OP
       2023-08-30 17:03:10 +08:00
    @musi 自己写来玩的哈哈哈哈,后面做协同编辑才是核心
    natsji
        7
    natsji  
       2023-08-30 19:19:24 +08:00 via Android
    github codespace 好像也可以直接运行命令?
    wangerka
        8
    wangerka  
       2023-08-30 19:31:55 +08:00   1
    @natsji codespace 就是 vscode remote 的在线版本,可比这个可玩性高多了,codspace 的终端是原生体验
    githmb
        9
    githmb  
       2023-08-31 10:18:09 +08:00
    这是把代码上传到服务器上了?假如打开的文件夹非常大呢
    moment082
        10
    moment082  
    OP
       2023-08-31 10:21:54 +08:00
    @githmb 对,它内部有一个服务器,具体有多大的项目不清楚,初始化的时候的一个项目是没有什么问题的,你可以测试一下
    Masoud2023
        11
    Masoud2023  
       2023-08-31 13:35:52 +08:00
    自己造了个 https://codesandbox.io/
    wednesdayco
        12
    wednesdayco  
       2023-08-31 16:43:53 +08:00
    不懂就问 为啥 logo 是网易云音乐
    moment082
        13
    moment082  
    OP
       2023-08-31 16:54:02 +08:00
    @wednesdayco 因为之前有写过网易云的,所以就直接使用这个了,还不是说很成型,就没有改了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     899 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 21:00 PVG 05:00 LAX 13:00 JFK 16:00
    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