原文链接:https://blog.csdn.net/lovelyelfpop/article/details/78702191
在 之前的文章 中,我已经展示了如何使用本地 package。在本文中,我将向您展示如何在自己的服务器上创建和托管远程 package。
要求
对于这篇文章,你需要 Sencha CMD 和 一个网站空间,用来托管你的 package。这可以托管在您的企业内部服务器上或互联网上。如果您在www.your-company.com下有一个可用的网站空间,您可以创建一个子域“sencha”或“cdn”,来为您的包提供服务。
只要托管可以访问静态资源,即满足 GET 请求即可。
网站空间的配置
在您的web空间(我们假设cdn.your-company.com)您创建以下文件夹结构:cmd/packages
。
这将指向URL:cdn.your-company.com/cmd/packages。
添加远程仓库
使用Sencha CMD,我们可以通过以下命令来查看当前远程仓库的列表:
sencha repository list
它会显示当前远程仓库的列表。默认情况下会显示
Sencha Cmd v6.5.2.15
[INF] Remote repository connections (1):
[INF]
[INF] sencha - http://cdn.sencha.com/cmd/packages/
现在我们创建一个新的远程仓库,链接到 cdn.your-company.com/cmd/packages。我们打算把这个库称为“demo”。我们通过以下命令来完成此操作:
sencha package repo add "demo" http://cdn.your-company.com/cmd/packages
这将添加对远程仓库的引用。
然后执行:
sencha package repo init -name "demo" -email "email@your-company.com"
将用 name 和 email 指定的身份来初始化您的本地仓库。
这样,你的远程仓库列表(sencha仓库列表)应该如下所示:
Sencha Cmd v6.5.2.15
[INF] Remote repository connections (2):
[INF]
[INF] sencha - http://cdn.sencha.com/cmd/packages/
[INF] demo - http://cdn.your-company.com/cmd/packages/
创建你的 Ext JS 包
使用Sencha CMD,您可以在 workspace/应用程序 中执行以下命令:
sencha generate package MyPackage
现在, 你的 workspace/应用程序 的 packages/local
文件夹中就多了一个 MyPackage
。
package.json
我们必须修改 packages/loca/MyPackage
文件夹中的 package.json
文件。它可能是这样的
{
"name": "MyPackage",
"namespace": "MyPackage",
"type": "code",
"framework": "ext",
"toolkit": "classic",
"creator": "demo",
"summary": "For demo purpose",
"detailedDescription": "Demo use only",
"version": "1.0.0",
"compatVersion": "1.0.0",
"format": "1",
"slicer": {
"js": [
{
"path": "${package.dir}/sass/example/custom.js",
"isWidgetManifest": true
}
]
},
"output": "${package.dir}/build",
"local": true,
"sass": {
"namespace": "Factory",
"etc": "${package.dir}/sass/etc/all.scss,${package.dir}/${toolkit.name}/sass/etc/all.scss",
"var": "${package.dir}/sass/var,${package.dir}/${toolkit.name}/sass/var",
"src": "${package.dir}/sass/src,${package.dir}/${toolkit.name}/sass/src"
},
"classpath": "${package.dir}/src,${package.dir}/${toolkit.name}/src",
"overrides": "${package.dir}/overrides,${package.dir}/${toolkit.name}/overrides",
"example": {
"path": [
"${package.dir}/examples"
]
},
"requires": []
}
重要的是这个文件中的 creator
键。它应该匹配我们之前创建的远程仓库的名称。无论您为仓库起的什么名称,应该仅使用1个单词,因为 Windows 不能很好地处理带空格的多个单词,比如“Demo Repo”。
指定清楚这个 package 被哪个 framework
使用也很重要。
"framework": "ext",
"toolkit": "classic",
你可以删除你不需要的键,比如 example
,sass
,overrides
,slicer
。然后,您也可以删除相应的文件夹来清理包的结构。
构建 package 用于远程托管
在我们准备好了第一个版本并维护了我们的代码后,就可以发布这个 package 了。首先,我们必须 build(构建)一下 package。
在我们的 package 的根目录下,执行命令:
sencha package build
完成此操作后,package 目录下将出现一个 build
文件夹,它是构建后的输出目录。然后进入应用程序根目录下的build
目录,您将注意到一个名为 MyPackage
(或你自己取名的 package 的名称)的文件夹。在这个文件夹中,有一个名为 MyPackage.pkg
的文件。
这个文件是刚构建的 package 的压缩版本。现在我们把这个文件添加到本地仓库“demo”中。
我们在应用程序根目录下的 build/MyPackage
文件夹下执行下面的命令:
sencha package add MyPackage.pkg
完成后,它会把该包放入 Sencha CMD 安装路径的 cmd
文件夹中。
如果是Windows系统,你可以在 C:\Users\用户名\bin\Sencha\Cmd\repo\pkgs
文件夹中找到。
如果是Linux,可以在 /root/bin/Sencha/Cmd/repo/pkgs
文件夹中找到它。
在这个文件夹中,就多了一个名为 MyPackage
的文件夹。
托管你的 package
剩下的事情就是复制 bin/Sencha/Cmd/repo/pkgs
目录下的 MyPackage
文件夹到我们的网站空间。您可以使用 FTP 软件来执行此操作。
你把 MyPackage
文件夹放到 你的网站空间的 packages
文件夹下!还要确保 catalog.json
更新到最新的版本!
它应该是这样的:
该目录只有一个名为 Factory
的包。它包含4个版本:
你的远程仓库现在可以被 Sencha CMD 发现了:
cdn.your-company.com/cmd/packages/MyPackage。
每次您 使用Sencha CMD 进行 sencha app watch
或 sencha app refresh
或 sencha app build
时,它都会检查远程仓库以获取最新版本的 package。
package 的版本管理
如果修改了 package 的源代码,则应该也要更新到远程仓库。这只需要几个步骤即可更新 package 的版本。
- 改变你的
package.json
文件并修改version
键 - build(构建)你的 package:
sencha package build
- 将构建后的 package 添加到你的本地仓库:
sencha package add MyPackage.pkg
(在 build 目录下执行改命令) - 把
bin/Sencha/Cmd/repo/pkgs
中的文件夹上传到您的网站空间下
完成之后,文件夹可能看起来像这样
如何在您的应用程序中使用该 package
要在您的应用程序中使用该 package,您必须修改应用程序根文件夹中的 app.json
文件。您必须按以下方式更改 requires
键:
"requires": [
"font-awesome",
"jarvus-hotfixes",
"MyPackage" //这里
],
或者根据所使用的具体 toolkit 修改 requires
键:
"classic": {
"js": [
{
"path": "${framework.dir}/build/ext-all-rtl-debug.js"
}
],
"requires": [
"ext-locale",
"MyPackage" //这里
],
"locale": "de"
},
一些常用的仓库和 package 命令
-
在你的应用程序的根目录下执行:
sencha app refresh -packages
这个命令会刷新你的应用程序使用到的 package,如果你的远程仓库的包更新了,就执行这个命令 -
sencha repository list
, 列出可用的远程仓库 -
sencha package list
, 列出所有可用的 package -
sencha repo sync -name "demo"
可以刷新本地的缓存
如果遇到远端发布了新版本 package,但用sencha app refresh -packages
硬是更新不到本地,就可以执行上面这个命令刷新缓存
同步远程 package 的问题(重要)
有时候会发生这样的情况:在将 package 上传到远程仓库,并用 sencha app refresh
命令刷新后,还是没有更新(下载)到最新版本。
这种情况,您可能需要执行以下命令来清除本地缓存:
sencha repo sync
完成之后,执行以下命令:
sencha package get <name_of_package>
将从远程仓库下载完整的 package。
如何删除 package 的最新版本
如果您的 workspace/应用程序 需要回退到旧版本的 package,可以执行:
sencha remove package <name_of_package>
这个命令不会从您的远程仓库服务器或者本地仓库中删除 package,但会从 workspace/应用程序 中删除最新版本的 package。如果您有多个版本需要回退,则可以多次输入此命令。
参考
翻译自
https://www.enovision.net/use-and-host-your-own-ext-js-remote-packages/