aspm: Atom-Shell的npm风格包管理器

需积分: 9 0 下载量 197 浏览量 更新于2024-10-31 收藏 20KB ZIP 举报
资源摘要信息:"aspm: Atom-Shell 包管理器(非官方)" 知识点: 1. aspm介绍:aspm是一种专门用于Atom-Shell的包管理器,其工作方式类似于npm,但针对的是Atom-Shell项目。由于Atom-Shell与npm的不完全兼容性,aspm提供了为Atom-Shell项目安装和构建npm模块的解决方案。 2. 动机:aspm的出现是为了解决为atom-shell构建模块的不便性,其设计目的是为了填补在atom-shell项目中使用npm模块时的不足。由于node-pre-gyp不支持atom-shell,使用它会使得模块构建更加困难,因此aspm尝试简化这一过程。 3. aspm的优势:aspm的设计初衷是为特定项目提供便利,其操作方式和npm类似,大多数情况下只是将命令传递给npm执行。如果用户在同一台机器上为不同平台或不同版本的atom-shell编译模块,使用aspm可能会更加方便。 4. aspm的警告:虽然aspm提供了一种便捷的方式,但开发者也明确指出,aspm目前可能还不稳定,存在不可靠的风险。 5. npm与aspm的关系:npm作为Node.js的官方包管理器,负责管理Node.js应用程序的依赖包。而aspm作为npm的一个变种或替代方案,主要服务于Atom-Shell项目。aspm并不是完全独立于npm,而是在某些情况下提供了一种更为合适的选择。 6. 标签"CoffeeScript":虽然文件中提到了"CoffeeScript"这一标签,但并未详细说明其与aspm的关系。CoffeeScript是一种脚本语言,它能够被编译成JavaScript。Atom-Shell作为Atom编辑器的底层平台,如果它支持使用CoffeeScript编写的插件或扩展,那么aspm可能会涉及到CoffeeScript模块的安装和管理。 7. 相关工具的提及:在描述中提到了"grunt-build-atom-shell"这一工具,尽管它的详细功能没有在描述中给出,但可以推测这可能是一个与aspm搭配使用的构建工具,专门用于Atom-Shell项目的构建过程。 8. 对于多平台和多版本的支持:开发者提到,如果需要在一台机器上为多个平台或多个版本的Atom-Shell编译,可能需要考虑其他解决方案,如使用Grunt构建任务。 9. 技术生态与兼容性:由于aspm是一个针对特定环境(Atom-Shell)的包管理器,它的存在表明了在技术生态系统中可能存在一些特定需求或场景,无法被主流工具完全覆盖,需要开发更加定制化的工具来满足这些需求。 10. 使用场景和局限性:aspm主要适用于Atom-Shell项目和npm模块的安装与管理。它的使用场景相对较为局限,对于不使用Atom-Shell或不需要处理特定兼容性问题的开发者来说,可能并不适用。
2019-07-18 上传
Atom Shell 现已改名为 Electron atom-shell 是 GitHub 随 Atom 一起开源的跨操作系统(Windows,Linux,MacOS X)的利用 Web 技术(Node.js、JavaScript、HTML 5)开发桌面应用的框架。Atom即构建在 atom-shell 之上。 与 Node-Webkit 的区别 atom-shell 和Node-Webkit很像,那么两者有什么区别呢? 1. 程序入口 Node-Webkit 的程序入口是一个网页,你在package.json中指定主页,然后这个主页会在浏览器中打开,作为应用程序的主窗口。 atom-shell 的程序入口则是一个 JavaScript 脚本,而不是直接指定一个 URL。你需要手动创建浏览器窗口,并通过相应的 API 加载 html 文件。你同时需要监听窗口事件以便决定何时退出应用。 因此,atom-shell 更接近 Node.js 运行时,API 也更加底层,你可以利用 atom-shell 进行 web 测试,类似phantomjs。 2. 编译系统 atom-shell 使用libchromiumcontent访问 Chromium 的 Content API,这样编译 atom-shell 的时候就不用编译整个 Chromium (编译 Chromium 非常费时)。 顺便提一下,GitHub 开发者还创建了brightray库,让 libchromiumcontent 的使用更方便。 3. Node 集成 Node-Webkit 的 Node 集成需要给 Chromium 打补丁才能工作。atom-shell 通过集成 libuv loop 和 平台的 message loop 避免给 Chromium 打补丁。 4. Multi-context Node-Webkit 创造了 Node context 和 web context 的概念,而 atom-shell 没有引入新的 context,而是直接使用 Node 的 Multi-context 特性(这一特性是 Atom 开发者赞助 Node 添加的)。 作者 GitHub 最初考察了 Node-Webkit,但是最终还是决定雇佣@zcbenz来开发想要的框架。于是 atom-shell 诞生了。 一个最简单的 hello atom 示例项目请看 hello-atom 主程序示例: var app = require('app');  // Module to control application life. var BrowserWindow = require('browser-window');  // Module to create native browser window. // Report crashes to our server. require('crash-reporter').start(); // Keep a global reference of the window object, if you don't, the window will // be closed automatically when the javascript object is GCed. var mainWindow = null; // Quit when all windows are closed. app.on('window-all-closed', function() {   if (process.platform != 'darwin')     app.quit(); }); // This method will be called when atom-shell has done everything // initialization and ready for creating browser windows. app.on('ready', function() {   // Create the browser window.   mainWindow = new BrowserWindow({width: 800, height: 600});   // and load the index.html of the app.   mainWindow.loadUrl('file://'   __dirname   '/index.html');   // Emitted when the window is closed.   mainWindow.on('closed', function() {     // Dereference the window object, usually you would store windows     // in an array if your app supports multi windows, this is the time     // when you should delete the corresponding element.     mainWindow = null;   }); }); 支持很多桌面应用特性,例如 Dock 菜单等: 使用 Dock 菜单的方法: var app = require('app'); var Menu = require('menu'); var dockMenu = Menu.buildFromTemplate([   { label: 'New Window', click: function() { console.log('New Window'); } },   { label: 'New Window with Settings', submenu: [     { label: 'Basic' },     { label: 'Pro'},   ]},   { label: 'New Command...'}, ]); app.dock.setMenu(dockMenu); PS:网易也有开放了Hex,同样是不满意node-webkit,就自己做了套. 标签:AtomShell  GUI开发框架