Nodejs相关:哈哈, Light Table 是用 node-webkit 和 cljs 写的
Nodejs相关:哈哈, Light Table 是用 node-webkit 和 cljs 写的
看了 Chris Granger 大神在 Conj 的演讲视频, 还有博客上的说明:
http://www.chris-granger.com/2013/01/24/the-ide-as-data/
之前记得 Light Table 完全是为 Clojure 做的, 用到 webkit 内核
在演讲里确认几乎整个编辑器都是 cljs 写的, 而没有多少的 Clojure,
ClojureScript 是 Clojure 的子集, 编译到 JS, 借助 Google Closure Compiler(?)
… 被吐槽 altjs 语言不好调试还是挺伤不起的, .call()
的 Error…
cljs 目前依赖 Java, 貌似看到新闻提过编译好的 Node 版本…
于是有多了一个运行在 Node 上的编辑器…
Nodejs相关:哈哈, Light Table 是用 node-webkit 和 cljs 写的
看了 Chris Granger 大神在 Conj 的演讲视频, 还有博客上的说明:
http://www.chris-granger.com/2013/01/24/the-ide-as-data/
之前记得 Light Table 完全是为 Clojure 做的, 用到 webkit 内核。但在演讲里确认几乎整个编辑器都是用 ClojureScript (简称 cljs) 写的, 而不是 Clojure。
ClojureScript 是 Clojure 的一个子集,编译成 JavaScript,借助 Google Closure Compiler 进行优化。
ClojureScript 本身依赖于 Java 环境,但可以编译成可直接在浏览器或 Node.js 中运行的代码。
Light Table 使用了 node-webkit(现在称为 Electron)来创建跨平台的桌面应用程序。node-webkit 允许开发者使用 HTML、CSS 和 JavaScript 来构建桌面应用,同时还可以利用 Node.js 的强大功能。
示例代码
假设我们要创建一个简单的 Electron 应用程序,并使用 ClojureScript 编写其中的一部分逻辑:
- 安装必要的工具
首先,确保你已经安装了 Node.js 和 npm。然后,你可以使用 create-electron-app
工具来快速搭建一个项目:
npm install -g create-electron-app
create-electron-app light-table-demo
cd light-table-demo
- 配置项目
接下来,我们修改 package.json
文件以包含一些基本配置:
{
"name": "light-table-demo",
"version": "0.1.0",
"main": "index.js",
"scripts": {
"start": "electron ."
}
}
- 编写基础的 Electron 应用
在 index.js
文件中,编写基本的 Electron 应用逻辑:
const { app, BrowserWindow } = require('electron');
function createWindow () {
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true
}
});
win.loadFile('index.html');
}
app.whenReady().then(createWindow);
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow();
}
});
- 使用 ClojureScript
为了使用 ClojureScript,你需要设置一个构建脚本,例如使用 shadow-cljs
。首先安装 shadow-cljs
:
npm install shadow-cljs
然后创建一个 shadow-cljs.edn
配置文件:
{:source-paths ["src"]
:output-dir "out"
:modules {:main {:entry main.core}}}
在 src/main/core.cljs
文件中编写 ClojureScript 代码:
(ns main.core)
(defn init []
(js/console.log "Hello from ClojureScript!"))
(init)
最后,添加一个启动脚本到 package.json
:
"scripts": {
"start": "electron .",
"build": "shadow-cljs release main"
}
这样,你就可以通过运行 npm run build
来编译 ClojureScript 并生成相应的 JavaScript 文件,然后通过 npm start
启动 Electron 应用。
总结
Light Table 是一个基于 Web 技术的现代 IDE,它利用了 ClojureScript 和 Electron 来提供强大的功能和跨平台支持。通过结合这两种技术,开发人员可以构建出既具有高性能又易于维护的应用程序。
Light Table 是一个由 Chris Granger 开发的交互式开发环境。它最初是为 Clojure 设计的,并且主要使用 ClojureScript(简称 cljs)和 node-webkit(现在的 Electron)来构建。ClojureScript 是 Clojure 的一个编译目标为 JavaScript 的版本,可以在浏览器中运行。
Chris Granger 在他的演讲中提到,Light Table 的大部分编辑器功能是用 ClojureScript 实现的,这使得 Light Table 可以在浏览器环境中高效地运行。ClojureScript 的编译工具链(如 Google Closure Compiler)帮助生成高效的 JavaScript 代码,从而提高了性能和可靠性。
关于将 Light Table 移植到 Node.js 平台,可能是因为开发者希望利用 Node.js 提供的额外功能,例如文件系统访问、网络通信等。尽管 ClojureScript 主要用于前端开发,但通过 node-webkit 或 Electron 等框架,可以创建桌面应用,这些框架允许你编写一套代码并在不同平台上运行(如 Windows、macOS 和 Linux)。下面是一个简单的例子,展示如何使用 Electron 创建一个基本的桌面应用程序。
示例代码
首先安装 Electron:
npm install electron --save-dev
然后创建 main.js
文件,内容如下:
const { app, BrowserWindow } = require('electron')
function createWindow () {
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true
}
})
win.loadFile('index.html')
}
app.whenReady().then(() => {
createWindow()
app.on('activate', function () {
if (BrowserWindow.getAllWindows().length === 0) createWindow()
})
})
app.on('window-all-closed', function () {
if (process.platform !== 'darwin') app.quit()
})
接着创建 index.html
文件,内容如下:
<!DOCTYPE html>
<html>
<head>
<title>My App</title>
</head>
<body>
<h1>Hello, Electron!</h1>
<script src="renderer.js"></script>
</body>
</html>
最后创建 renderer.js
文件,内容如下:
console.log('Hello from renderer process!')
现在你可以在命令行中运行 npx electron .
来启动你的应用程序。
以上示例展示了如何使用 Electron 创建一个简单的桌面应用。在实际项目中,你可以进一步扩展这个基础结构,包括使用 ClojureScript 编写应用逻辑,并通过 Electron 框架将其与 Node.js 后端集成。