评论
我刚刚在另一期中提到了这一点;我非常担心 laserweb 很容易成为废弃软件,除非我们能找到一种方法来针对相对快速移动的 npm 依赖链、浏览器要求、不断发展的 web 标准等来维护它。 第一个需要是进入你的方案中的步骤 2),并以此为契机尽可能地更新依赖项。例如,我希望这可以解决滚动条问题。我对此毫无用处,但我可以帮助完成第 3 步),因为我的职业是 CM/Build/Devops 工程师。 至关重要的是,如果我们能做到这一点,那么我们就可以考虑如何为新控制器扩展 Laserweb,并可能在响应速度更快的界面上工作。 |
情况是,所有前端开发人员都离开了该项目。我是唯一剩下的开发人员,但我的部分是后端 (lw.comm-server)。我不太熟悉前端的 react/redux/webpack。如果有人可以帮助升级所有依赖项并将整个项目带到没有经验的开发人员也可以编译它的状态,我将非常高兴。 重要的是:
|
@awhitty; 您是否有机会考虑将一个合理/有效的 package.lock 放在一起;要么针对 不是:我认为 laserweb 功能已完成供我使用。总会有一大堆可以改进的地方,但它目前非常适合我的工作流程。 |
@easytarget您不需要 electron 分支进行开发。它仅在构建 Windows 和 OSX 可执行文件/安装程序时需要。 前端 (LaserWeb4) 和后端 (lw.comm-server) 理论上是独立的应用程序,仅通过 websockets 进行通信。 为方便起见,后端 nodejs 网络服务器还提供前端 webpack 文件。这意味着克隆 lw.comm-server 并运行“node server.js”就足够了,然后在 IP 端口 8000 上使用 chrome 或 chromium 浏览器访问前端(如 Raspberry Pi wiki 中所述)。 对于前端开发,你只需要 LaserWeb4/dev-es6。如果您还想测试服务器通信,请在测试前手动启动 lw.comm-server。 |
我将 LaserWeb4 dev-es6 分支和 lw.comm-server master 带到了可以在 nodejs 10.16.3 下编译的状态。 为了让它工作,你必须:
在前端更新了一些东西之后:
我希望这至少能给你一个可以编译的起点! |
感谢您的答复@cprezzi和@easytarget!额外的上下文非常有帮助。 我将查看您对两个存储库所做的更改,以更多地了解发生了什么,我将按照这些说明进行操作!我很高兴 PR 更改以引入 我想到了其他一些事情,尽管这些主题大多与这个特定问题无关:
|
|
@awhitty我已邀请您成为 LaserWeb 组织的管理员,这样您就可以在我们所有的回购协议中执行所需的操作;) |
@cprezzi顺便说一句,这并没有从我的雷达上消失!刚从一个长假回来,所以我正在慢慢收拾东西。 |
我无法使用 ubuntu、19.10、节点 v13.13.0 构建应用程序, SyntaxError: 我通过执行 npm install 尝试了另一种方法 执行时 `> serialport@6.2.2 安装/home/mfadel/Projects/LaserWeb4-dev-es6/node_modules/lw.comm-server/node_modules/serialport
prebuild-install WARN install No prebuilt binaries found (target=13.13.0 runtime=node arch=x64 platform=linux)
../src/serialport.cpp: 在函数 ‘void EIO_AfterOpen(uv_work_t*)’ 中: ../src/serialport.cpp:95:
../src/serialport.cpp: 在函数 ‘void EIO_AfterUpdate(uv_work_t*)’ 中: ../src/serialport.cpp:150: ../src/serialport.cpp: 在函数 ‘void EIO_AfterClose(uv_work_t*)’ 中: ../src/serialport.cpp:188: ../src/serialport.cpp: In function ‘void EIO_AfterFlush(uv_work_t*)’: |
嗨 LaserWeb 的朋友们?
通过发布页面上的二进制文件,我已经使用 LaserWeb 几天了,并且对该软件的运行情况总体上感到满意!我还在熟悉这个项目,所以我希望你能多多包涵。
问题
我想为这个项目做贡献,所以我克隆了 repo 并运行
npm install
andnpm run installdev
. 此时,npm start
失败并出现与依赖项相关的错误:这是由于
lw.comm-server
库中预期的版本与正在安装的版本不匹配。该模块的package.json
specifying"dotenv": "*"
,并且似乎有重大变化dotenv
(人们require('dotenv').configure(...)
现在使用)。再深入一点,我注意到在这个 repo 的文件
package-lock.json
中故意忽略了npm 5。.gitignore
此回购协议中的 A可以在短期内阻止重大更改,但如果人们独立处理软件包package-lock.json
,问题仍会自行显现。lw.comm-server
我还注意到,在运行
npm run start-app
时,webpack 构建由于缺少object.omit
依赖项而失败。果然src/reducers/index.js
从 imports 了object.omit
,但是依赖没有列在package.json
. 我认为这对人们有用,因为它作为传递依赖存在?建议
这是我到目前为止所得到的。我有一些建议,我认为这些建议会在未来为更多的第三方贡献开放这个项目。我已将它们从最小范围订购到最大范围:
package-lock.json
从这个 repo 的文件中删除.gitignore
并提交一个工作package-lock.json
到 repo此更改至少应该使其他开发人员能够处理此项目,而无需花费太多时间来处理依赖项。
package.json
为这个 repo 的所有 s 以及其他lw.*
包使用确切的包版本像这样的东西
"dotenv": "*"
在package.json
. 相反,我建议安装带有--save-exact
标志的软件包以固定到确切的版本。除了package-lock.json
更改之外,此策略还应消除与依赖项和传递依赖项中的破坏性更改相关的一类问题。这里的权衡是人们不会总是“免费”从新版本的软件包中获得最新功能。事实是他们从来没有真正免费得到它们。开发人员 A 可能会更改为使用 2.6 版软件包中引入的方法,而开发人员 B 仍在使用 2.5 版。开发人员 B 可能会提取开发人员 A 的更改并注意到代码已损坏。开发人员 B 无法知道开发人员 A 是否编写了错误代码,或者与开发人员 A 的本地设置相比,开发人员 B 的软件包是否过时。要求开发人员在回购中保存包的确切版本消除了这种歧义。
像Greenkeeper这样的工具可以减少保持包最新的摩擦。根据我的经验,这实际上并不像人们期望的那样必要。
引入 CI 工具以确保此 repo 始终可以从源代码构建
我注意到你们都在自述文件的愿望清单上列出了“所有平台的自动化电子构建”。引入 CI 工作流程以确保至少可以在开发环境中从源代码构建项目是朝这个方向迈出的良好第一步。这里的许多基础工作都可以重新用于自动化测试平台和自动构建系统,两者都将使这个项目开放更多的贡献。
将所有
lw.*
包合并到一个 monorepo这个建议可能有点争议,但是考虑到这个项目有很多相关的包需要一前一后地改变,如果每个包都被签入,可能更容易跟踪项目的历史并协调跨领域的变化。相同的回购协议。这种方法适用于像 React 和 Babel 这样的项目,我想它在这里也适用。
我不确定你们是否都熟悉Lerna,但它是一种减少管理多个包的单一仓库的摩擦的工具。
tl;博士
我无法从源代码构建,有一些问题导致了这一点,我对如何消除这些问题有一些建议,如果你们愿意接受这些建议,我很乐意采纳这些建议。感谢制作有用的软件!!