包,用于通过calmjs框架将requirejs集成到python环境中,为从python包提供的javascript源代码生成可部署工件提供可复制的工作流,这些javascript包与来自NPM或其他类似的包存储库。

calmjs.rjs的Python项目详细描述


calmjs.rjs

用于将requirejs集成到python环境中的包 通过calmjs框架 为 从提供的javascript源代码生成可部署构件 与标准javascript或node.js结合使用python包 来自 npm 或其他类似软件包存储库的软件包。

https://travis-ci.org/calmjs/calmjs.rjs.svg?分支机构=2.0.1https://ci.appveyor.com/api/projects/status/jbta6dfdynk5ke59/branch/2.0.1?svg=truehttps://coveralls.io/repos/github/calmjs/calmjs.rjs/badge.svg?分支机构=2.0.1

简介

Web应用程序可以使用任何语言创建,但是 他们提供的交互式前端用户界面最终依赖于 某种形式的javascript。python web应用程序框架或系统 提供前端功能,连接后端 采用 node.js 来测试 它们可以提供作为包管理器的 npm (或 bower ) 用于获取关联的 功能。这常常导致分离 已将一组包依赖项配置转换为多个 不同的集合;通常这也会导致包被断开 分成两部分以适应所使用的分销渠道(PYPI 与NPM和其他公司的比较)。

这个结果对于python包管理来说是有问题的,因为 增加了软件包传播的难度 所有相关包中的版本和依赖项信息 以一致、可移植和可复制的方式管理渠道 对于下游包及其用户。另一个问题是 用于资产管理或工件生成的配置文件是 通常与手头的系统紧密耦合,这使得它相当困难 让它们的下游包重用这些配置来生成 与其他上游包一起工作的组合工件 以一致的方式。

其他一些包管理器试图通过完全 但是它们缺乏对本地可用python的认识 软件包(例如已经安装在本地 环境不被鲍尔理解),因此构建的过程 涉及鲍尔往往最终依赖公共基础设施和选择 将其移动到私有基础设施,甚至重用本地可用的 工件/包需要额外的配置来否定 这些系统提供的好处TEMS。此外,这些构建脚本 与不可移植的特定项目紧密耦合。

calmjs框架的目标是重新实现这种分离。 通过提供公开包含的javascript源代码的方法 对于python包,使用这个包, calmjs.rjs ,提供 从这些导出源生成可部署工件的工具 文件,加上从 npm 或其他相关的node.js包管理系统。

功能

calmjs.rjs如何工作

calmjs框架提供了允许python包 声明它们所需的对基于 npm 的包的依赖关系 它们提供的javascript代码,以及允许python的系统 声明哪些模块导出javascript源的包 可重复使用。

calmjs.rjs 中包含的实用程序提供了消费方法 这些声明,将javascript文件作为源文件和 编译目标,生成最终可部署工件 从 requirejs 包中通过 r.js

目前,源文件可以用amd和commonjs两种语言编写 模块格式,尽管建议使用commonjs格式,因为 在大多数系统下都有广泛的支持,而且calmjs.rjs提供了 处理 将javascript源代码转换成与r.js兼容的表单 优化器。但是,源文件中的 exports 语句应该 暂时不属于 模块。导出 。AMD头 页脚也可能不存在,因为 calmjs rjs transpiler将添加 所需的适当页眉和页脚(例如 要求从正确的源导入或用于映射 导出 模块。导出 ),以便最终脚本 可用于目标平台或格式。

生成的源将与 从node.js包获取的所有已声明的绑定源 经理或仓库。然后将生成一个生成文件,该文件将 包括所选的所有相关源,以便生成 通过 r.js 的最终工件文件。然后可以将它们部署到 适当的环境,或包括上述整个过程 作为python后端功能的一部分。

最终,calmjs.rjs 的目标是简化集成和 客户端javascript与服务器端python的交互, 通过简化建造、运输和部署 一个共享包和环境中的一组源。卡尔姆斯 框架提供了这两个环境和 那里提供的工具将有助于建立一个共同的, 可复制的本地node.js环境。

最后,对于质量控制,此包与 calmjs.dev ,它提供了设置测试所需的工具 运行javascript测试的环境和工具 相关javascript代码的python包。然而, 该包没有声明为直接依赖项,因为不是所有的 案件将需要该包的可用性。请参考 有关详细信息,请参见安装部分。

注意,在最初的实现中,javascript源文件 该框架松散地支持以下某些定义 只模仿ES6打算提供的内容(如前所述)。即使有 这是在python包中处理javascript的结果 作为可部署的编译目标的源文件 工件文件,输入源生成的文件和导出路径 calmjs.rjs 不用于直接使用Web客户端,如 网络浏览器。从这个框架生成的工件将是可用的 通过AMD API。

安装

建议本地环境已经有node.js和 npm 安装在最低限度,以便安装 如果尚未安装并可用,则需要js。也, python的版本必须是2.7或3.3+;支持pypy, 对于PyPy3版本5.2.0,由于上游包的原因,必须使用alpha1 无法在当前稳定的PyPy3版本2.4中运行。

要在给定的python环境中安装calmjs.rjs 使用以下命令直接从pypi安装:

$ pip install calmjs.rjs

安装/使用带有calmjs的requirejs

为python包建立开发/构建环境 当前工作中对 r.js calmjs.rjs 的支持 目录(例如,对于项目),可以执行以下命令:

$ calmjs npm --install calmjs.rjs

当运行npm install requirejs时 由 calmjs.rjs 声明的包,它需要从 npm 中获得 同样的效果,请注意calmjs框架使得 npm 要向下传播到依赖包的依赖项;例如 如果一个python包声明 calmjs.rjs 为依赖项 (通过安装需要或附加要求 setup.py )可能有一整套依赖于 使用以下命令安装(假设包名为 示例.包

$ calmjs npm --install example.package

example.package的所有标准javascript和node.js依赖项 现在将通过相关的 工具。此过程还将安装所有其他依赖项 其他python包依赖于 示例.包已声明。

有关所有工作原理的详细信息,请参见 calmjs 的文档。否则,请继续 用法 部分。

替代安装方法(高级用户)

对于最新的特性,calmjs.rjs的开发仍在进行中 并且bug修复,开发版本可以通过git安装 所以:

$ pip install calmjs
$ pip install git+https://github.com/calmjs/calmjs.rjs.git#egg=calmjs.rjs

或者,可以直接克隆git存储库并执行 python setup.py在源代码的根目录中开发 目录。

请记住 calmjs 必须在 设置之前可用。py calmjs.rjs 源代码树中执行,因为它需要 calmjs 中编写功能。或者, 如果有任何关于 在调用 设置.py

由于 calmjs 同时声明为名称空间和包,因此 工作python环境中需要的低级设置 确保内的所有模块都能正确定位。然而, 早于v31.0.0的版本的setuptools不会创建 安装包时所需的包命名空间声明 在与 pip混合时使用这种开发安装方法 在同一命名空间中安装 。因此,不一致的导入 calmjs 命名空间下的任何模块都可能发生故障。作为一个 例子:

>>>importcalmjs.rjsTraceback(mostrecentcalllast):File"<stdin>",line1,in<module>ImportError:Nomodulenamed'calmjs.rjs'>>>importcalmjs.base>>>importcalmjs.rjs>>>
<如果这行为(和解决方法)是不可取的,请确保 安装所有与calmjs相关的包都遵循相同的方法 (即对于所有包,要么 python setup.py develop ,要么使用 通过 pip 获得的轮子,或将 setuptools 升级到版本 31或更高版本并重新安装所有受影响的软件包。

测试安装

最后,为了验证是否成功安装了 calmjs.rjs ,需要 可通过以下命令执行包含的测试:

$ python -m unittest calmjs.rjs.tests.make_suite

但是,如果将外部node.js依赖项安装到 遵循当前目录,可以指定当前目录 作为环境变量。在POSIX兼容下 shell可以从该目录中执行此操作:

$ CALMJS_TEST_ENV=. python -m unittest calmjs.rjs.tests.make_suite

请注意,如果 calmjs.dev 包不可用,那么 将跳过测试。要避免这种情况,请安装该软件包 单独安装,或者使用其附加依赖项安装calmjs.rjs 声明如下:

$ pip install calmjs.rjs[dev]

用法

从包含javascript代码的包生成requirejs工件 通过已经公开的calmjs模块注册表系统 安装到当前环境中,只需执行以下操作 命令:

$ calmjs rjs example.package

本文档中的以下部分将概述如何 为给定的python启用javascript模块导出功能 通过calmjs模块注册表系统打包,但是 有关此主题的详细说明,请参阅提供的自述文件 通过 calmjs 包,在 从 python包

为python声明javascript导出

任何通过 calmjs.module 注册表公开的javascript代码都将 被收集并编译成一个工作需求工件。为了 例如,给定由 名为示例的包

$ pip install calmjs.rjs
0

这是最基本的声明,适用于共享 与提供的导入位置同名。

下面是具有嵌套子模块的包的AM示例 (称为example.lib 和example.app ):

$ pip install calmjs.rjs
1

而声明的导入位置看起来就像一个python模块 (根据python入口点的规则),calmjs.module registry将使用commonjs/es6风格的导入路径显示它们 (例如, 'example/lib' 'example/app' ),因此用户需要 那些javascript模块要确保它们需要那些字符串。

请注意,默认的源提取器将提取所有 这些目录中的javascript文件。最后,由于 如何进行导入,建议不要使用 使用。

如果手头的包没有直接声明它对 calmjs ,一个显式的 calmjs\u模块注册表=['calmjs.module'] 可以 需要在 setup 函数中声明包以确保 这个默认的模块注册表将用于获取javascript 来源于。

综上所述, setup.py 文件应该包含 以下内容:

$ pip install calmjs.rjs
2

对于requirejs工件的构造,命令 calmjs RJS 将自动从 所选python包对临时构建的依赖关系 目录,其中还将为 调用 r.js 来构造工件。运行示例:

$ pip install calmjs.rjs
3

因为calmjs.rjs 使用的构建过程是在单独的构建中完成的 目录,所有通过node.js模块系统的导入都必须是 声明为〈tt〉附加条款〈u calmjs〈tt〉。例如,如果 example/app/index 需要使用 jquery 下划线 这样的模块:

$ pip install calmjs.rjs
4

它需要声明源于 npm 的目标位置加上 对于依赖项,它需要在 设置.py

$ pip install calmjs.rjs
5

完成后,重新运行python setup.py egg_info以编写 新声明的元数据进入包的egg info目录,以便 它可以在环境中使用。 calmjs npm --安装 现在可以调用将 npm 依赖项安装到当前 目录;允许 calmjs.rjs 查找所需的源文件 从 npm 放到构建目录中,以便 r.js 找到它们。

最终的calmjs运行结果可能是这样的:

$ pip install calmjs.rjs
6

开卷机将添加适当的样板,因此 将从 node_modules 如果已声明extras_calmjs。然而, 在某些情况下,所需的工件应该只包含 来自python包的源代码,不包含附加组件,反之亦然(由于 库通过另一个已部署的工件可用),这是 由 r.js 空: 方案支持,并为 calmjs rjs 可以这样做:

$ pip install calmjs.rjs
7

上面的例子显示了两个独立工件的生成,一个 只包含来自python包的源代码 在 calmjs.module 注册表中声明,另一个包含 只有外部额外来源。

如果以上触发了 r.js 的依赖项跟踪错误,则 最后一个可以应用的标志 在启动时完全禁用r.js的跟踪功能 一个类似的跟踪过程来定位 在生成的 配置文件。确保生成的 artifact在其他地方提供了所有必需的模块。

explicit extras\u calmjs 声明也支持 通过 bower (通过 calmjs.bower 支持);而不是使用 节点模块 作为关键,应使用 鲍尔组件 。 取而代之的是

除了calmjs.module之外,还可以指定其他注册表 带有 --源注册表标志。假设在 当前环境注册为 myreg1 myreg2 并且 示例 包已向这两个包注册了源,命令 从这两个注册中心构建一个包到一个工件可以是 触发方式如下:

$ pip install calmjs.rjs
8

处理RequireJS加载程序插件

RequireJS定义的AMD系统具有加载程序的概念 插件,其中提供的模块名可以用 作为后缀! AS 插件处理的参数。因为后面提供的字符串是 对整个系统来说是不透明的,因此直接由 在前面的插件中,它需要的资源将特定于 插件本身。因为它可以通过 requirejs 系统加载资源, 任何需要配置的路径都需要完成。

为了解决这个问题, calmjs.rjs 引入了loader的概念 插件处理程序和一个注册表系统来处理这个问题。给定的 rjstoolchain 将具有默认的加载程序插件regi分配的stry, 但可以通过指定自定义标识符(重写 要使用的注册表的默认 'calmjs.rjs.loader_plugin' , 这将允许在给定的 项目。有关更多信息,请参阅 calmjs.rjs.registry 模块 有关如何构造和设置以供使用的详细信息。

默认情况下, 文本 处理程序注册到默认加载程序 插件注册表,它应该包含遇到的最常见的用例 通过 calmjs 框架。请注意,包仍然需要 在插件的 包中声明它们的(dev)依赖项, 理想情况下,使用受良好约束的版本,因此要确保构建的一致性 为所有最终用户提供体验。

测试独立的、最终确定的RequireJS工件

使用标准的calmjs rjs工具链生成的amd工件 运行时可以使用 calmjs.dev 包。给出一个最终的例子js 实现 示例包提供的功能 工件可以用 示例提供的测试进行测试。 使用以下命令打包:

$ pip install calmjs.rjs
9

上面的命令使用 calmjs.rjs 针对 example.js 工件测试的设置 文件,使用 示例 包提供的测试。测试 执行类似于开发过程中的执行。

为python包声明预构建的javascript工件

最后,为了完成python包的部署,这个过程 应该包括自动生成和包含javascript 结果python轮中的工件。这可以通过 在 calmjs.artifacts 注册表中使用键指定一个条目 作为工件的文件名和作为导入的值 建筑商的位置。提供的默认生成器函数位于 calmjs.rjs.artifact:complete_rjs 将启用 完成python包的requirejs工件。例如:

$ calmjs npm --install calmjs.rjs
0

一旦安装了这些入口点,运行calmjs工件构建 package 将使用requirejs工具链并构建 位于calmjs工件内部的 example.package.rjs.js 工件 元数据目录中用于 example.package 的目录。 或者,对于与setuptools集成度更高的解决方案, setup中的setup 函数。py 还应启用 build_calmjs_artifacts 标记,以便 setup.py build 也将 启动构建过程。这对于自动 生成并包含工件作为车轮制造的一部分 过程。考虑这个 设置。py

$ calmjs npm --install calmjs.rjs
1

使用 setup.py 构建轮子可能会导致这样的结果。 注意,执行 r.js 是过程的一部分,并且 元数据(egg info)目录随后被构建到控制盘中。

$ calmjs npm --install calmjs.rjs
2

为了测试包工件,下面的入口点还应该 在 calmjs.artifacts.tests 注册表下指定,以便 运行calmjs工件业力示例。包将执行 由example.package针对工件声明的javascript测试 在 calmjs.artifacts 中声明的

$ calmjs npm --install calmjs.rjs
3

故障排除

以下是有关此包及其 与其他python/node.js包集成。

在包上调用calmjs rjs时,得到 enoint

通常这是由sourc引起的源包中的e文件或 调用 的注册表需要一个不可用的javascript模块 在生成目录中。一个可能的原因 框架是python包未能声明 它可能需要,或者显式映射方法和/或源 选定的注册表没有导致所有必需的源 已加载到生成目录中。

如果缺少的源文件是有意的,则应用 --empty 或 rjs工具的 -e 标志将删除所有丢失的 捆绑包中的模块;请注意,这将导致 工件包没有执行它所需的所有模块。 生成的工件包应该与 提供所需结果的其他工件包 依赖关系。

rjsruntimeerror:无法找到"r.js"

这意味着当前的node.js环境缺少requirejs 从npm打包;可以手动安装,也可以通过 关于这个包的calmjs 。如果需要使用给定的python包 要生成包,它的 包应该声明 或者声明依赖于 calmjs.rjs

用户警告:未知分发选项:

在使用开发方法设置和安装期间,如果 显示警告消息,请确保egg元数据正确 通过在源代码中运行python setup.py egg_info生成 目录,因为在安装程序 脚本最初是执行的。

贡献

  • 问题跟踪器:https://github.com/calmjs/calmjs.rjs/issues" rel="nofollow">https://github.com/calmjs/calmjs.rjs/issues
  • 源代码:https://github.com/calmjs/calmjs.rjs" rel="nofollow">https://github.com/calmjs/calmjs.rjs

法律

calmjs.rjs 包是calmjs项目的一部分。

CALMJS项目版权所有(c)2016奥克兰生物工程 奥克兰大学研究所。 calmjs.rjs 根据 GPLV2或更高版本的条款。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么数据库中具有“读取”角色的用户不能列出集合?   在Java中使用带有反应式包装器的非阻塞IO逐行读取文件   java当`!`时,什么可以简化表达式应用于`&`或`||`   java Jasperreports报告了四组多个动态图像   java我想将单个字符串的ascii值存储在一行中,如何使用getbyte函数实现这一点   javascript如何在java中写入文件时响应帖子?   新用户注册后java登录失败| Weblogic安全   java中的多线程和同步   java在FOR循环中使用ParseObject   Java货币数字格式   java模拟单例类   java编写大量数据时,部分数据会丢失/当所有数据都存在时,写入过程非常缓慢   java如何处理复合对象的所有子对象?   java如何获得相交集的大小?   我需要在java中的不同源代码中对broadcost Httprequest进行测试   java我想在MainActivity中添加SpreadsheetWebService,而不需要从其他类调用它   安卓 Java是否有NFC API用于标准机器?