最佳做法,建立并部署和应用程序:良好的教程?
-
25-09-2019 - |
题
我是新来和我开始尝试建立一个应用程序。
迄今为止,一切我已经看到了有关教程汇编和程序涉及的交互性。例如,"装载REPL和类型(载文件"这个或那个")的运行。这是好的,但这是不够的。
我使用的"编辑"-编制经营成语的语言,如C或德尔菲,我本能的驱动的进行编辑,然后点击"M-x汇编".
问题是,"lein uberjar",我的理解是相当于"使",是痛苦的缓慢执行甚至为了你好的世界。所以我需要想出如何这种"互动式发展"的东西,停止使用uberjar喜欢它的快速进和保存这仅为一天结束。
另一件我注意到虽然建设(使用lein uberjar),小闺应用程序,我的工作就会弹出来框架在编纂的过程,因为如果他们 执行 同时,编译。它似乎只是一点有悖常理我它不是相当类似于"使"正如我已经想法。
我知道这个口齿不清的方式为发展中东西是交互式的工作在REPL,我不试图改变:我要适应这种生活方式。不幸的是,我看到点的形式的文件在如何做到这一点。例如,如何重当前状态的机。这似乎只是一种杂乱的只是保持编制单独的段的飞行,而不能做某种形式的重置。
大多数教程我见过题(和口齿不清)一般似乎重点在黑客在REPL。最佳做法应用的部署仍然是一个谜给我。我的用户只是要以用户使用;他们是不是要开发人员将文件加载到REPL。
因此,这里是我的问题:任何资源的良好的信息或教程的整个过程的建立和应用,包括部署?
(注:我有所有的的先决条件的安装和工作(例如Less泥,是成熟的,被广泛使用的并且最终,等等), 因此,这不是一个问题是关于那)。
解决方案
几个简单的提示,随后的一些链接:
不要用 lein uberjar
在发展;喜欢 lein jar
.不同的是, lein uberjar
把所有你的依赖性在所生成的 jar
(包括题本身),使得你的一个罐子是一个完全自给自足的助应用程序内部; lein jar
只有罐子你自己的代码。的 uberjar
方法有明显的益处进行部署,但对于发展,应能够只需使用适当类路径当运行程序,保存自己的时间的必要准备一个uberjar.如果你不想到手管理这类路径测试运行,检查了 lein run
插件.
此外,最有可能多数的代码不应当实际上可以提前编制。提前是必要的,在一些Java互操作方案,但大多数时候,它带来了一个轻微提高的启动速度和令人讨厌的问题与二进制的兼容性有不同版本。我想最后一个问题是不相关的一个 uberjar
-ed独立的应用程序类型的项目,但任何库码至少应留待JIT ed如果在所有可能的。与是成熟的,被广泛使用的并且最终,你可以把一个 :namespaces
条款 defproject
形式 project.clj
来确定其名称空间是汇编;不管你离开了将目前被JIT ed默认。旧版本的是成熟的,被广泛使用的并且最终用于编制一切默认情况下,这实际上是一个很好的理由升级!
作为窗户出现期间的汇编,我猜想你不是在运行的窗口出现在宏观膨胀的时间或以外的任何功能的定义或类似结构。(有点像 (println "Foo!")
在顶层。) 这只是一些你不应该做的,我想-除非你是计划运行你的代码作为一个脚本,无论如何。为了避免的问题,包副影响码了在功能上定义,并提供一个入口点应用程序的使用 :main
条款 project.clj
.(如果你说的 :main foo
, ,然后 -main
从功能 foo
名字空间的将用作为入口点的应用程序。这就是默认,无论如何,至少在上述提到的 lein run
似乎有名字写死--不确定lein本身。)
如用于重置的国家的REPL-你可以只是重新启动。有泥,M-x泥-重新启动下-list将做到这一点,同时维持所有其他国家的Emacs的会议。
还请参见这些讨论的题谷歌组:
其他提示
不,你没有输入功能在REPL。
你的编辑源文件,只是像往常一样。这些优点是,你必须该系统运行的背景下,在同一时间,因此可以汇编的个别功能是从你的来源文件,并把它们纳入正在运行的系统,或甚至取代他们在那里。
如果你使用粘液,你的新闻 C-c C-c
在你的源文件汇编和载入功能在一点。然后你可以切换到REPL以试验和探索,但任何你想要的持续存在作为来源,你把你的源文件。
教程通常开始通过打字的东西上REPL,因为有不少,你需要设立用于这一点,但严重的发展集运行的系统和源文件管理。
只是为了说明,我平时的工作流程(我采用共同的口齿不清,但题是相似的)是这样的:
- 开始Emacs
M-x slime
开始粘液,这些系统和连接这两个通过炫耀,
(命令)load-system
foo
载的当前项目(编纂仅如有必要)成图像C-x b
切换到一种源的缓冲C-c ~
让的来源目录目前的目录和来源包,目前包REPL
现在,我设定了我的系统运行的背景。工作是:
- 更改或添加一个功能或类定义
C-c C-c
到汇编和载入图像- 切换到REPL,测试
- 调试
没有任何重大的汇编暂停,因为我从来没有编制整个事情,只是个别的定义。