奇怪的用法又增加了,这回是直接在思源里直接伺服思源的源码

本贴最后更新于 972 天前,其中的信息可能已经时过境迁

奇怪的用法增加了:通过渲染进程在思源中拉起子应用 - 链滴 (ld246.com)

上面那个帖子介绍了在新的渲染进程中拉服务的办法。

electron 的渲染进程又是有 node 环境的对吧, 所以我们可以用它来做一些奇怪的事情。

比如说直接把思源的前端代码拉到应用里跑着玩。

但是我们知道思源的源码都是 ts 嘛,所以需要搞一点点小操作,比如说把它转译成 js 之后伺服。

转译的部分挺长的就直接放 github 链接算了,老哥们应该都能够看到吧。。。。。

naive/script/coreServicies/compiler at master · leolee9086/naive (github.com)

不过直接跑是跑不了的,pdfjs.js 那里会出问题,不过只要改改就行了

·

/* Copyright 2016 Mozilla Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* globals module, __non_webpack_require__ */ "use strict"; import {addScriptSync} from '../../protyle/util/addScript' import {Constants} from '../../constants' addScriptSync(`${Constants.PROTYLE_CDN}/js/pdf/pdf.js`, 'pdfjsScript') export default window["pdfjs-dist/build/pdf"] export let __esModule = window["pdfjs-dist/build/pdf"]["__esModule"] export let AnnotationEditorLayer = window["pdfjs-dist/build/pdf"]["AnnotationEditorLayer"] export let AnnotationEditorParamsType = window["pdfjs-dist/build/pdf"]["AnnotationEditorParamsType"] export let AnnotationEditorType = window["pdfjs-dist/build/pdf"]["AnnotationEditorType"] export let AnnotationEditorUIManager = window["pdfjs-dist/build/pdf"]["AnnotationEditorUIManager"] export let AnnotationLayer = window["pdfjs-dist/build/pdf"]["AnnotationLayer"] export let AnnotationMode = window["pdfjs-dist/build/pdf"]["AnnotationMode"] export let CMapCompressionType = window["pdfjs-dist/build/pdf"]["CMapCompressionType"] export let GlobalWorkerOptions = window["pdfjs-dist/build/pdf"]["GlobalWorkerOptions"] export let InvalidPDFException = window["pdfjs-dist/build/pdf"]["InvalidPDFException"] export let MissingPDFException = window["pdfjs-dist/build/pdf"]["MissingPDFException"] export let OPS = window["pdfjs-dist/build/pdf"]["OPS"] export let PDFDataRangeTransport = window["pdfjs-dist/build/pdf"]["PDFDataRangeTransport"] export let PDFDateString = window["pdfjs-dist/build/pdf"]["PDFDateString"] export let PDFWorker = window["pdfjs-dist/build/pdf"]["PDFWorker"] export let PasswordResponses = window["pdfjs-dist/build/pdf"]["PasswordResponses"] export let PermissionFlag = window["pdfjs-dist/build/pdf"]["PermissionFlag"] export let PixelsPerInch = window["pdfjs-dist/build/pdf"]["PixelsPerInch"] export let RenderingCancelledException = window["pdfjs-dist/build/pdf"]["RenderingCancelledException"] export let SVGGraphics = window["pdfjs-dist/build/pdf"]["SVGGraphics"] export let UNSUPPORTED_FEATURES = window["pdfjs-dist/build/pdf"]["UNSUPPORTED_FEATURES"] export let UnexpectedResponseException = window["pdfjs-dist/build/pdf"]["UnexpectedResponseException"] export let Util = window["pdfjs-dist/build/pdf"]["Util"] export let VerbosityLevel = window["pdfjs-dist/build/pdf"]["VerbosityLevel"] export let XfaLayer = window["pdfjs-dist/build/pdf"]["XfaLayer"] export let build = window["pdfjs-dist/build/pdf"]["build"] export let createPromiseCapability = window["pdfjs-dist/build/pdf"]["createPromiseCapability"] export let createValidAbsoluteUrl = window["pdfjs-dist/build/pdf"]["createValidAbsoluteUrl"] export let getDocument = window["pdfjs-dist/build/pdf"]["getDocument"] export let getFilenameFromUrl = window["pdfjs-dist/build/pdf"]["getFilenameFromUrl"] export let getPdfFilenameFromUrl = window["pdfjs-dist/build/pdf"]["getPdfFilenameFromUrl"] export let getXfaPageViewport = window["pdfjs-dist/build/pdf"]["getXfaPageViewport"] export let isPdfFile = window["pdfjs-dist/build/pdf"]["isPdfFile"] export let loadScript = window["pdfjs-dist/build/pdf"]["loadScript"] export let renderTextLayer = window["pdfjs-dist/build/pdf"]["renderTextLayer"] export let shadow = window["pdfjs-dist/build/pdf"]["shadow"] export let version = window["pdfjs-dist/build/pdf"]["version"]

就是把它改得啰嗦一点..........

naive/pdfjs.js at master · leolee9086/naive (github.com)

为啥不用 vite 呢,因为一是一开始没配置好在思源里拉起 vite 老是出问题,二是改了代码之后 vite 热更新其实也没有比直接刷新快多少(主要是因为我菜)..............

还有一个地方就是思源得源码里面是有一些像这样的代码的嘛

image.png

///#if !BROWSER ///endif

这里需要一个解析工具 ,用 vite 的老哥可以试试 vite-plugin-ifdef(之前弄得挺糙得,最好自己改改再用),不用的话就直接自己弄一下条件解析就行了。

整出来反正是能够跑起来的。

这玩意有什么用呢。。。。。。

思源的编辑器比较复杂,有的时候自己改了也不大敢往仓库 pr 对吧,但是自娱自乐的时候我又不喜欢老是要去打命令行,所以就干脆在思源里面拉一个思源得了,基本实现魔改自由(并没有,因为 V 姐肝得太快所以你的魔改代码也得跟着改...... 过不了两天就觉得就跟不动了就安心当条咸鱼算了)

image.png

上面那个就是运行效果,看起来差不多是吧,其实它是这样的

image.png

然后那天看到主仓库里有个 api.ts 但是没怎么动就自己玩了一下。。。

image.png

所以说到底还是并无什么卵用.......

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    26159 引用 • 108664 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • AWS
    11 引用 • 28 回帖 • 8 关注
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 270 关注
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    26157 引用 • 108660 回帖 • 1 关注
  • 程序员

    程序员是从事程序开发、程序维护的专业人员。

    589 引用 • 3528 回帖 • 2 关注
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    10 引用 • 54 回帖 • 180 关注
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    284 引用 • 248 回帖
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    108 引用 • 295 回帖 • 1 关注
  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    29 引用 • 66 回帖
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    117 引用 • 99 回帖 • 197 关注
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    181 引用 • 400 回帖
  • RemNote
    2 引用 • 16 回帖 • 24 关注
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 92 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖 • 3 关注
  • JWT

    JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

    20 引用 • 15 回帖 • 26 关注
  • OpenResty

    OpenResty 是一个基于 NGINX 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

    17 引用 • 50 关注
  • gRpc
    11 引用 • 9 回帖 • 100 关注
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    173 引用 • 414 回帖 • 364 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 281 关注
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    187 引用 • 831 回帖
  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 77 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    10054 引用 • 45681 回帖 • 69 关注
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖 • 2 关注
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    20 引用 • 245 回帖 • 232 关注
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 192 关注
  • Office

    Office 现已更名为 Microsoft 365. Microsoft 365 将高级 Office 应用(如 Word、Excel 和 PowerPoint)与 1 TB 的 OneDrive 云存储空间、高级安全性等结合在一起,可帮助你在任何设备上完成操作。

    5 引用 • 34 回帖 • 1 关注
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 82 关注
  • API

    应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    79 引用 • 431 回帖