-
Notifications
You must be signed in to change notification settings - Fork 179
spm@1.x 旧版文档备份 #808
Comments
Hello spm:使用 spm 和 SeaJS 开发一个中型项目现在我们要正儿八经开始开发一个叫 hello-spm 的项目了,别笑,虽然只是个为了让你更好的了解 SPM 而杜撰出来的项目,但也五脏俱全。 我们提供了在线演示:http://fool2fish.github.com/hello-spm 。 你可以检出源码:https://github.com/spmjs/hello-spm 。 在正式开始之前,我还是要啰嗦一句,所有的范例代码都是基于 SeaJS 的, 请确保你已经知道该怎么使用 SeaJS 了。 创建项目目录我们先来看看项目的整体结构
安装需要的模块显然,我们需要用到 seajs 和 jquery,所以要使用 spm install 来安装他们。 打开命令行工具,将路径切换至 sea-modules/ ,运行:
这时你会发现 sea-module/ 中多了 seajs 和 jquery 两个模块。其中 seajs 为最新版本, 而 jquery 则是我们安装时指定的 1.8.3 版本。其中 jquery 目前的 root 是 gallery,所以会增加一个 gallery 目录。 创建模块回想一下 index.html 运行的效果,多处用到了随机数,例如 "hello spm !" 的单个字符大小,字符串出现在页面中的位置以及字符串在页面上停留的时间。 我们把这样一个可产生指定范围的随机整数的工具方法放到 util 模块中。 下面我们来 初始化 这个模块。 命令行工具路径切换至 util/ ,运行:
spm 会在 util/ 中创建以下文件:
其中:
我们的 hello-spm 实在有点简单,所以演示代码仅保留了 src/ 和 package.json 这两个必备部分。 src/ 中只有 util.js 一个文件, 源码非常简单,如下:
拆分子模块接下来我们处理相对复杂一些的 hello 模块,他要做这么几件事情:
这个模块复杂到需要拆分成多个子模块来进行开发 (好吧,我承认这纯粹是教程需要)。 命令行工具路径切换至 hello/ ,运行:
使用 spm init 初始化后,在 src/ 中除了默认创建的 hello.js,还需要手工创建一个 handle-text.js 文件。 hello.js 完成大部分的主体功能,而 handle-text.js 专门负责处理传入字符串的随机字符大小。 hello.js 的源码如下:
注意 :
更多 require 的说明可查看 SeaJS 的 模块标识 handle-text.js 的源码如下:
编写开发时页面开发过程中,我们就常常需要编写一些测试用例,或者演示页面。 这种情况下我们希望模块是不需要打包的,并且可以查看日志,以便调试。 本例中,我们并没有为单个模块创建单元测试或者演示页面。简单起见,我们在 index.html 页面中编写了一些开发时的代码,代码如下:
注意:
现在运行 index.html 就能看到效果了,源码上做任何的改动也能立马体现,打开调试工具,你还能看到打出的 log。 打包部署打包配置结束编码测试工作后,我们就要准备将模块打包部署,以供正式环境使用了。打包相关的配置都写在每个模块的 package.json 中了。 先来看看 util 模块的 package.json
再接着看 hello 模块的 package.json
然后我们还有一个 parent package.json
其中由于我们 hello 和 util 模块的 root 和 version 是一样的,我们就可以把他放到 parent 的配置中。 绝大部分和 util 模块的配置一样,只是多了一项 dependencies,需要注意的是: jquery 作为一个特殊的模块,打包的时候并不指定具体的依赖,仅写上 "$": "$" 即可。 回顾一下,就是因为这个原因,我们在刚刚创建的 index-debug.html 中,还需要为 jquery 配置别名: '$':'gallery/jquery/1.8.3/jquery.js' 。 接下来我们将以 util 模块为例讲解模块的打包部署(hello 模块的打包部署方式完全一样)。 打包命令行进入到 util/ ,运行:
SPM 会在 util/dist/ 目录创建 util.js 和 util-debug.js 两个文件。有兴趣的读者可以打开 util-debug.js 看看打包后的文件和源码有何不同。 部署为了方便演示,我们准备把打包好的模块部署到本地。 进入 util/ ,运行命令:
这时 sea-modules/ 会新增 util 模块:
编写正式页面胜利就在眼前,我们终于要完成这个项目了。现在我们要把测试用的 index.html 转换成线上正式运行的 index.html,代码如下:
注意 index.html 前后的一些区别:
结束语如果你耐心的看到这,那么恭喜你!现在你已经很了解 SeaJS 和 SPM 最常用的功能了。接下来,赶紧去自己的工作中去实践一把吧,有任何建议和反馈欢迎反馈给我们:) |
package.jsonpackage.json 位于模块的根目录下,提供模块的信息以及 spm 的打包配置。一个较完整的 package 文件看起来如下:
通用配置
开发时配置
打包发布时配置
注意 :如果你的 repository 里有多个模块你应该指定一个 path:
|
package.json : output目前整个配置文件中最复杂的一个部分就是 output 配置,目前支持很多输出规则,而且也比较灵活,后续还会支持用户进行扩展。下面的内容会详细的说明具体的输出规则。 假定一个模块叫 outputTest,文件结构如下:
其中 package.json 内容如下:
依赖关系:a 依赖 b 和 jQuery,b 依赖 c 默认合并
build 后输出:
模块内合并依赖
build 后输出:
注意: 全依赖合并
和 模块内合并依赖类 类似,不同的是输出的 a.js 除了包含 b.js 和 c.js 外,还会包含 jQuery 的内容。 注意: 数组依赖合并
将 a.js 和 b.js 打包成 array-merge.js。 复合规则的合并上面我们看到的都是基本类型的合并方式,为了支持更加复杂的合并规则,我们也支持复合对象的合并规则。 指定排除规则的合并通过这种方式我们可以排除某些模块
我们也支持全局形式的模块排除,这样对于a.js, 还是 b.js 都会被排除 jquery 这个模块。 自定义模块文件的依赖合并有些时候,我们输出的模块文件并不存在与我们的源文件中,这个时候就需要用到下面这种方式了。
build 后输出:
通过配置 main 这种方式,我们可以输出一个并不在源文件中存在的模块。 注意 更加负责的 includes 规则有些时候,我们不光想合并某个模块的依赖,还想合并单独的几个文件,这个也是支持的.
资源文件输出我们也支持资源文件的输出
css文件输出
目前css文件功能比较简单,仅支持简单的合并。 批量文件的模块输出 (新加功能,~1.0.0)有些情况下我们要输出的模块比较多,可以通过在key上面使用通配符处理。
这样的话比较繁琐,所以我们可以通过下面一种简化的方式:
这样的配置则会自动转换成上面的形式的. 关于资源文件输出,和模块排除,批量模块输出,我们支持glob的语法形式,所以相关语法可以参看. https://github.com/isaacs/node-glob 下面是上面一个合并规则的汇总。需要注意的地方就是 **对于 includes, excludes 这些规则中的内部模块一定要以 ./ 开头。来表明他的位置。
|
package.json : spmConfig我们在打包的时候可以通过命令行参数的形式对 spm 的操作进行控制,也可以通过配置的方式进行。
选项含义
|
spm js 模块生命周期解析js 模块的解析流程
资源输出(resources)
编译(compile)
模块分析(analyse)在这个阶段我们主要进行代码的语法检查(lint),依赖分析(dependencies),依赖冲突检查(depCheck)等操作. 依赖分析(dependencies)
依赖冲突检测(depCheck)主要检查统一模块中间不同版本的冲突检查. 预打包(preBuild)
合并输出(output)在这个阶段主要就是按照 output 的配置,对模块合并输出,具体合并规则参看 [[package.json-:-output]] 打包 (build)这个时候就是对模块进行些统一的一些收尾工作
上传到源中 (upload)
部署到指定地方 (deploy)具体参看 [[spm deploy]]
|
SPM 0.8.x 使用说明目前spm为了更好的对 CMD 规范下的模块更好的打包,目前在持续改进中。目前我们在arale项目中已经开始使用,后续我们会根据在使用过程中遇到的问题会不断的改进和调整。下面是目前做的一些改动 主要功能点
安装说明下载最新的spm代码
测试
使用使用很简单,就是到具体项目目录下执行
配置文件在整个工具中需要使用到下面几类配置文件. package.json这个配置文件主要记录项目的一些描述信息. 这个主要存在下面两类位置
更多的配置选项参看https://github.com/seajs/spm/wiki/package.json.
config.json这个主要配置spm打包的时候需要的一些全局信息, 现在配置的主要就是源服务的配置
下面是具体的内容.很简单.
额外说明
详细命令
风险点
常见错误大家自己看下配置文件的规则。应该可以避免常见错误。 |
SPM 0.9.0 使用指南简单、放心的包管理工具 安装首先需要安装, node 和 npm: http://nodejs.org/#download 然后有两种安装方式: ###通过npm###
###通过源代码###
SPM 概要目前我们的打包是基于配置文件,而且对模块的目录结构也有一定的要求,所以需要先了解下SPM打包模块下基本目录结构和一个经典的配置文件. 目录结构
其中dist目录是我们打包好的模块. 也就是最终上线使用的模块. 配置文件(example)
dependencies 相关依赖解析。相关写法
依赖查找由于打包的时候我们需要计算依赖关系,所以我们根据用户配置的依赖需要找到具体的模块,我们目前是通过源来完成的,对于一些标准模块 outout 模块输出配置.目前支持多种写法,最常用的就是上面两种:
总之SPM 目前说简单点就是根据模块的配置文件,然后计算模块的依赖,并替换相关依赖,并把需要的文件合并起来,然后输出标准的CMD模块. 对于配置文件更详细的内容可以参看下面两个内容: 对于具体的例子,可以参考我们已经开放出去的模块: SPM 相关命令目前我们的命令大概可以分为两类. 模块打包spm build [options]根据package.json的配置打包模块并输出到dist目录:
其中有下面相关设置:
spm upload [options]打包模块(build),并把打包好后的dist目录的内容按照我们的定义上传到源服务中 方便其他人使用.
其中build的参数也都适用,有一个新增加的:
spm deploy [options]打包模块,并上传源服务,而且根据用户配置的远程服务器信息,可以把dist下面的内容scp到远程服务器. 其中参数和upload的一致. 工具辅助spm install [options] name[@Version]获取所有的 seajs 兼容新模块到当前目录.
也可以获取指定模块:
查看更多详情:
spm init创建一个标准模块:
spm transport [--force] transport.js你可以通过
spm server [options]在当前目录启用源服务, 端口为 8000
这样使用者可以在内网部署此服务,可以把模块部署到此服务,其他用户也可以从这个服务获取里面的模块. 如果一个服务想对多个系统(也就是模块配置有不同的root)提供服务的话
|
Spm build 之自定义目录结构在上一篇文章中我们已经介绍了基于默认的目录结构的模块打包,其这篇文章主要针对任意目录结构的项目打包。下面涉及到的例子,用户可以根据自己项目的特点进行调整。
项目结构在打包的过程中,由于会对代码本身的内容有改动(标准化,压缩,合并等),所以一般情况下会把代码分为两部分源码目录和部署上线的代码.
目录含义:
打包部署首先我们需要提供下面几个信息, 其中下面的命令都是在js目录中执行. 必选
这两个是必须提供的,其中我们提供了多种方式来让用户指定这两个参数: 源文件
执行完这个命令后就会把app下面的代码进行简单的处理,部署到assets目录中了。不过由于缺少模块输出配置,所以目前执行的操作仅仅是代码压缩。 合并输出合并输出规则很多,对于简单的规则我们可以通过命令行来完成:
这个命令的含义就是输出bootstrap这个模块,并会合并他内部的依赖模块.
配置加载有两种方式可以指定配置文件的加载:
最终执行完,就会在assets中生成一个app目录,里面的模块就是已经处理好的模块了.
版本控制那有人问了,那我们是否也能像默认项目一样对我们的模块也提供版本控制呢?答案是可以的,只要提供相应的参数version即可。
|
SPM build 之默认目录结构SPM 可以简单的认为就是一个项目打包工具
现在有两个模块,一个组件模块Xbox, 一个业务模块App, 下面是相关目录结构。 首先一个标准的模块有3部分组成:
相关代码如下:
app 模块相关代码和目录结构.
整体的目录结构,用于演示,用户可以根据自己的情况去调整.
下面是相关目录和文件说明: index.html模拟首页,其中里面调用了app组件
其中需要说明的就是app代码的加载路径,可以参看seajs/seajs#258 中中间关于base路径的说明。 seajs, jquery这两部分可以通过在public目录执行下面命令:
spm 会从默认源中去下载最新的seajs和jquery代码到本地目录。 app, xbox默认我们执行
执行这个命令后就会把打包后的文件部署到你指定的public目录中正确的模块可访问位置. 好了,整个就介绍完了?说了这么多,怎么可以快速验证呢?
这个命令可以快速启动一个web服务,默认端口号是8000, 用户可以通过 这样一个基本的例子就介绍完了,其中文档涉及到的相关命令可以参看其他文档. |
SPM build 合并模块处理相关说明spm build 打包支持模块的合并,目前对于合并模块的使用有些误解,在这里统一说明下。 为什么需要合并?
这种情况其实可以认为就是一个外观模式,用户只需要关心widget提供的接口即可,具体daparser和autoRender在使用widget的时候是不需要关心的。
这样打包出来的module.js里面将包含他的所有依赖,不过前提是在 module.js 的代码中对 jquery 这些模块有显示的依赖.
基本也可以归结为一个目的,减少页面请求. 有那些合并规则?可以参看 [[package.json-:-output]] 合并模块的调用其实如果我们对合并模块按照使用widget这种方式,其实是没有什么问题的。比如:
但是还有更多的情况下,我们对于合并模块的目的就是减少页面请求,这个时候我们我们可能有这种需求,比如加入有下面一个合并模块:
在页面中正常使用module这个模块用法如下:
但是, 其实有很多人还有一起需求,我们需要widet, 需要subModuleA怎么办呢? 有很多直觉的用法是
如果这样执行的话,我们就会看到文件请求不到,因为如果通过id映射到的模块,线上并不存在,因为我们只是发布了 module 这个模块,widget和subModuleA是存在于module中的。
|
SPM build 命令行参数详解如果存在下面目录结构
文件相关内容如下:
那么我们目前可以基于下面命令进行打包合并。首先我们看下我们的最基本的需求:
打包后的结果如下
好了,下面就解释下上面命令涉及到的参数.
其中还有几个参数需要说明下:
|
SPM build 详解spm buildspm build 的主要责任:将 src 文件根据用户配置的 pakcage.json 生成信息完备的符合 CMD 规范的模块到dist目录。 模块分为两种:
下面只讨论生态圈模块, 私有源模块和生态圈模块类似,只是多了个root的处理. 输入与输出假设有一个模块:
package.json 信息: [[package.json]]
注: aio (all in one) spm build 后的结果为:
其中 src 的内容为:
打包好的 dist 内容应该为: a-debug.js:
a-aio-debug.js:
d-debug.js:
id 的提取
id = #name/version/filename 其中 name 与 version 从 package.json 中读取。
依赖提取
下载文件位于spm缓存中.
关于从 cache 读取依赖,另外再讨论。 require 替换
文件合并
部署由于打包好的模块会生成id, 而我们在进行使用的时候会把请求的id对应为相关目录,所以在部署到的时候需要把dist下面的文件部署到和id对应的目录中. |
Spm default lifycyclespm 在开始设计的时候就以便于扩展作为设计思想,而目前的插件体系主要是用于在项目打包过程中,目前在SPM核心中已经内置了以下插件,后续使用者也可以通过配置的方式来扩展插件集合. 目前插件按照项目的生命周期进行了分组,下面就是基本的信息。 jsmodule.exports = [{
'clean': ['clean']
}, {
'resources': ['resources'] // 代码输出到build目录.
}, {
'compile': ['coffee', 'less', 'transport'] // 代码编译.
}, {
'analyse': ['lint','dependencies', 'depCheck'] //依赖分析.
}, {
'preBuild': ['tpl', 'css'] // 代码模块规范化.
}, {
'output': ['output'] // 合并输出.
}, {
'build': ['min', 'install', 'zip'] // 代码压缩和本地缓存.
}, {
'upload': ['pack', 'upload'] // 代码上传源.
}, {
'publish': []
}, {
'deploy': ['deploy'] // 代码部署.
}]; css
package
template
|
spm deploy
把模块打包产生的 dist 文件部署到指定的位置。目前支持本地部署和服务器部署.
本地部署
执行上面命令就会把模块部署到对应的目录中。 服务器部署我们目前的服务器部署仅支持 ssh的方式。如果需要使用此方式,需要在 "deploy": {
"default": {
"path": "/home/admin/wwwroot/assets/",
"host": "assets.dev.example.com",
"user": "admin",
"pass": "alipaydev",
"port": "22"
},
"h11":{
"host": "assets.h11.example.com"
},
"h22":{
"path": "/home/admin/wwwroot/assets/static/",
"host": "assets.h22.example.com"
},
"local":{
"host": "local",
"path": "../projects/sea-modules"
},
"abc": {
"host": "local",
"path": "./abc"
}
} 其中default, h11, h22, local 表示四个部署模块,h11 和 h22 中不全的信息会到 default 中补全。也可以自己写全。local 默认是本地部署,所以不会从 default 中进行信息补全.
统配部署为了简化一些部署配置,我们也支持部分的变量替换. 此功能是通过额外的插件完成的,具体的使用参看 https://github.com/spmjs/plugin-alipay-deploy "deploy": {
"{{hole}}": {
"host": "assets.{{hole}}.example.com"
}
} 当插件配置到 spm 中后,如果用户执行
当 p123 无法匹配到 deploy 中的配置项时,会根据 {{hole}} 配置产生下面配置 "p123": {
"host": "assets.p123.example.com"
} 然后进入正常的部署流程。 |
spm initspm init 使用说明目前 spm init 推荐使用 源 来保存模板信息。也就是说模板其实也是一个模块,也需要按照模块的基本结构来定义,然后部署。 模块项目目录结构
主要目录结构和原有的模块开发是一样的,我们只需要把初始化的模板内容放到 src 中即可。
用户交互交互主要分为两部分 模块选择
模板项目开发模板项目初始化
模板部署
参考 |
spm install#安装模块 从源安装
默认会安装最新的稳定版模块,如果需要安装正在开发中的没有发布的模块:
我们也可以指定需要安装模块的版本
我们也可以指定安装目录,默认是安装在当前目录下的 sea-modules 目录中。
注意事项
从 github 仓库进行模块安装
如果模块在仓库打有tag,我们也可以安装上面的格式,指定模块的版本。 注意事项
|
spm transport目前
语法package.json按照标准的模块配置来,其中大部分内容可以从原始的项目中copy 过来。需要注意的就是 root 和 output 配置 "root": "gallery",
"output": {
"backbone.js": "."
} transport直接看代码吧 define(function(require, exports) {
var previousUnderscore = this._;
var previousJQuery = this.jQuery;
this._ = require('underscore');
this.jQuery = require('$');
// @include https://raw.github.com/documentcloud/backbone/{{version}}/backbone.js
this._ = previousUnderscore;
this.jQuery = previousJQuery;
}); 很简单,目前主要就是通过 包含压缩文件项目的 transprot @1.5.1 新增有些第三方模块比如 jquery, async 已经包含了压缩文件,而且他们的压缩文件的生成有自己的定制规则,对于这种模块我们就没有必要在对他们进行压缩了,为了让 spm 识别这种模块,对于这种方式的模块书写方式有所不同.
上面的是 async 模块。我们通过 @srcUrl, @minurl 来标明这个模块自身已经包含压缩过的文件,这样我们 spm 创建压缩模块的时候就会从指定的 minUrl 来进行读取,而不是重新进行压缩. 使用
就是按照标准的模块项目执行就行了。 静态资源输出资源文件的支持,通过增强output来完成
js, css 资源输出目前可能还有 css 这些标准模块的文件进行支持,比如下面这种形式
|
spm 压缩参数配置目前压缩设置分为两部分: 压缩工具的选择
压缩参数的配置目前只支持 yui 和 uglifyjs 的参数配置 yui 的压缩
具体参数配置可以参看 http://developer.yahoo.com/yui/compressor/ uglifyjs 压缩
具体参数配置可以参看 https://github.com/mishoo/UglifyJS2
|
Spm 命令详解SPM 主要有以下命令 打包类下面这个三个命令都是基于项目标准的配置文件进行打包,其中主要的行为是基于用户配置的package.json. spm build项目打包. 支持默认项目打包和任意目录结构打包,执行的过程有所不同,具体详情参看: spm upload项目打包,并把打包好的内容,部署到用户指定的源中.
spm deploy项目打包,并部署到源中和用户配置的服务器上.
功能类spm install根据用户指定,把模块安装到本地. 如果模块依赖的其他模块,也会把依赖的模块下载到本地.
spm search查找指定模块信息. 主要显示当前模块的版本信息,和子模块内容.
spm transport根据用户写的 transport文件,把一个非标准模块,转换为标准的CMD模块,相关transport的语法例子可以参看:
spm env用户本地spm 环境清理,主要用来清除本地缓存.
spm server启动一个源服务,用来进行多用户协同开发.默认是在8000端口开启一个web服务.
工具类目前有些功能相对比较独立的插件,可以单独执行 spm concat合并文件, 目前此功能比较简单,就是简单的合并,和
spm min压缩指定目录的内容并输出到指定的目录
spm lint使用jshint检查指定目录的代码
辅助spm sources对源的内容重新扫描,并生成相应的索引信息。
使用命令:
|
SPM 源详解模块源是一个中央仓库,里面存放 tgz 格式的模块。它主要来共享模块,有了源只要用户提供模块的名称和版本,我们就能找到对应的模块了. 源的目录结构:
源主要用于下面几个地方 spm build在用户打包中,如果依赖了相关模块,spm会从源中找到这些模块,并分析出相关依赖,添加到当前模块信息中,这样就可以在用户加载js的时候,避免反复的去请求依赖了,因为我们在打包过程中,已经计算好了全部依赖了. spm install我们可以从源下载相关模块到本地.
spm upload当我们开发好一个模块,可以对外进行使用了,我们就可以使用这个命令把模块部署到源中(仅限于私有源,modules.spmjs.org这个源不能自动部署) 搭建自己的源服务这个其实很简单,找一个空目录执行
其中:
|
Spm 配置文件类型SPM 在操作过程中会涉及到下面几类配置文件, 然后会根据用户执行命令的不同加载一个或多个配置文件,并按照顺序把内容合并起来,其中先入为主。
其中还需要注意的是,以json为后缀的配置文件,一定要严格遵守JSON的语法,否则不能继续后续的打包操作. 下面就是我们常见的几类配置文件. 下面列出的属性都是和SPM 的一些操作相关的,具体的可以参看package.json里面的内容,下面是具体的配置样板. 标准项目配置文件 - [[package.json]]
parent项目配置
对于一个项目下面的模块可以抽象出来一部分公用配置. 比如我们可以配置root, sources这类公用信息.
系统配置
对于当前用户所有的项目生效,放置在
源配置我们还可以对使用同一源的模块设置相关配置,其实这个也可以看作是parent的一种扩展,区别就是一个在本地,一个在源上,这个源配置的主要用处在于配置一些涉及很多模块的,属性比较稳定的内容,而且配置改动后相关模块都会被应用到.
在我们打包过程中的加载顺序如下:
所以如果大家可以根据自己的情况,把相关内容放置到对应的配置文件中. |
全局配置: ~ .spm config.jsonSPM 配置文件位于
配置
|
命令行参数spm系统功能。
options
spm build构建 cmd 模块。
options
examples
spm upload构建 cmd 模块。并上传到指定的源服务中。
options
examples
spm deploy构建 cmd 模块。上传到指定的源服务中, 并把模块部署到指定的位置。
options
examples
spm install安装指定的 cmd 模块到本地。
options
examples
spm env对 spm 本地环境进行清理。
options
examples
examples
spm server启动源服务
options
|
在 Node 中调用目前SPM的核心功能已经支持nodejs的接口调用,下面是相关使用指南. spm build模块打包,这个其实和命令行调用
具体 options 支持下面参数: 标准项目下面的参数主要用于标准的模块项目打包 base (必选)设置模块打包目录,对于标准模块,一般情况下只需要设置这一个参数就够了。 baseModInfo这个是设置模块基本信息,也就是说和 package.json 中对应的信息都可以通过这个配置进来。比如:
非标准项目下面可以支持自由的目录结构,只要设置对应的参数,即可打包。 src设置模块源文件目录,主要用于非标准目录结构. 用户可以通过这个参数指定需要打包模块的目录
name设置模块名称,主要用于模块的 id 生成。 version设置模块版本,会体现在模块 id 中. output设置打包输出规则,具体参看 SPM 配置详解之output篇 通用配置下面这些参数适用于任意情况 dist设置打包后的模块部署的位置 with-debug用于设置生成debug文件的名称规则, 默认是 'debug', 用户如果不需要产生debug文件可以设置为'' or false source用户指定模块的源 spm upload和 spm deploy和 spm install用户把源中的模块快捷的安装到本地,支持依赖下载, 具体用法如下:
具体 options 支持下面参数: modules需要install的模块名称, 会从源中查找对应的内容,一般有下面两种形式
force强制更新 to安装到那里 from从那里获取模块信息,主要是设置源地址. spm init初始化一个空项目.
具体 options 支持下面参数: base项目创建的目录地址. projectName项目名称,可选,如果没有设置的话,根据base的目录来作为项目名称, 比如 base为 spm env
具体 options 支持下面参数: clean清除本地缓存,主要就是删除 init从源中重新构建 |
如何开发一个 spm 插件这里说的插件主要是针对外部扩展的. spm 目前的插件机制是很简单的,开发一个插件只需要下面几步: 创建一个 spm 项目插件的部署和打包本身也是通过 spm 来完成的,和普通的 CMD 模块使用的规则上是一样的 插件需要简单遵循一定规范
其实上面这段话就构成了一个最基本的插件。在 spm 中整个插件的执行都是串行的,目前还不支持并行执行.现在只需要在 run 函数里面添加你所需要执行的代码就行了。其中 project 这个对象里面提供了整个的项目信息,所以通过这个对象基本上可以完成大部分的操作。
内置了很多使用的模块为了方便插件的开发,spm 在调用插件的时候会给插件设置很多全局变量,插件可以直接使用。目前有
还有一些就是 spm 依赖的模块,插件也可以直接 require 使用
代码示例 |
如何搭建一个源服务如何快速搭建本地源服务由于 modules.spmjs.org 目前访问不是很稳定,使用者实际可以搭建自己的源服务。
搭建自己的源服务
{
"roots": ["arale", "gallery", "test"]
}
spm server -p 8000 这样就完成了一个源服务器的搭建了。 高级功能代理我们也只模块的代理,也就是说当用户从这个源服务请求的模块找不到的话,可以从代理的源服务中去查找.
{
"proxy": ["http://modules.spmjs.org"]
}
spm server -p 8000 |
安装首先需要安装 node 和 npm: http://nodejs.org/#download 注意:新版 node 自带 npm,不需要独立安装 然后有两种安装方式: 通过 npm 安装
通过克隆 Git 上的源码安装
运行
输出正确的版本,就表明安装没有问题了. 升级{{怎么升级}} 删除{{怎么删除}} |
HOME简单、放心的包管理工具 。 SPM 是一个基于命令行的前端项目管理工具,目前可以支持 JS 和 CSS 的项目。
点此查看 [[安装]]。 使用教程快速上手由于 SPM 和 SeaJS 关系密切,我们推荐你直接查看 SeaJS 官网的 快速上手 教程。通过这篇教程,你将学会如何开发一个小型项目。 进阶教程如果快速上手难不倒你,那就准备接受更大的挑战把:) 请查看 [[Hello spm:使用 spm 和 SeaJS 开发一个中型项目]],教程以开发步骤为顺序讲解。通过这部分内容,你将逐步了解到 SPM 绝大部分的常用功能,并能胜任实战中的项目开发。 API 文档
讨论和报告 Bug |
目录结构标准模块的目录结构:
其中 dist 是由 spm build 生成的。 一个标准模块的最小结构:
|
注意:以下是 spm@1.x 版本的文档,已不再维护更新。
The text was updated successfully, but these errors were encountered: