Skip to content
This repository was archived by the owner on Aug 15, 2018. It is now read-only.

Spm build 之自定义目录结构

leoner edited this page Oct 16, 2012 · 22 revisions

在上一篇文章中我们已经介绍了基于默认的目录结构的模块打包,其这篇文章主要针对任意目录结构的项目打包。下面涉及到的例子,用户可以根据自己项目的特点进行调整。

对于目录结构,SPM 本身没有太多的要求,只需要指定 SPM 需要操作的代码即可。

项目结构

在打包的过程中,由于会对代码本身的内容有改动(标准化,压缩,合并等),所以一般情况下会把代码分为两部分源码目录和部署上线的代码. 下面是一个简单的目录结构: 下面的例子来自社区用户,具体可以参看 https://github.com/seajs/spm/issues/316

 ── assets # common modules and the third-party libaries
│   ├── backbone
│   │   └── 0.9.2
│   │       ├── backbone-min.js
│   │       └── backbone.js
│   ├── seajs
│   │   └── 1.2.1
│   │       ├── sea-min.js
│   │       └── sea.js
│   ├── ...
│   ├── plugin-tracker.js
│   ├── ... # common seajs plugins as plugin-tracker
│   └── css
│       └── reset.css
├── css
├── imgs
├── index.html
└── js  # a lot of app's custom modules
    └── app
         ├── bootstrap.js
         ├── models
         │   └── nearbydeals.js
         ├── template.js
         ├── views
         │   └── nearbydeals.js
         └── ...
     package.json

目录含义:

  • assets 目录下主要存放不经常变的通用模块、通用资源文件和第三方类库
  • js 下存放很多app相关自定义的业务、功能模块。其中app这个目录可以看做是一个大的模块项目,其中里面的js文件可以认为是子模块.

打包部署

首先我们需要提供下面几个信息, 其中下面的命令都是在js目录中执行.

必选

  1. 源文件
  2. 模块输出配置

这两个是必须提供的,其中我们提供了多种方式来让用户指定这两个参数:

源文件

spm deploy --src=app --local=../../

执行完这个命令后就会把app下面的代码进行简单的处理,部署到assets目录中了。不过由于缺少模块输出配置,所以目前执行的操作仅仅是代码压缩。 好,下面我们就看下合并输出配置

合并输出

合并输出规则很多,对于简单的规则我们可以通过命令行来完成:

spm deploy --src=app --output.bootstrap=.

这个命令的含义就是输出bootstrap这个模块,并会合并他内部的依赖模块. 由于命令行参数有限制,对于有些输出规则不太好通过命令行参数来描述,这样通过配置文件的方式是更好的选择。

  1. 在js目录中添加 package.json 文件。这样 SPM 在执行的时候就会默认进行加载
  2. 也可以通过 --global-config 进行加载.
spm deploy --src=app --gobal-config=../config.json --local=../../

最终执行完,就会在assets中生成一个app目录,里面的模块就是已经处理好的模块了.

需要注意的是在这种情况下模块 ID 的生成是根据当前模块目录的位置来决定的,比如bootstrap.js他的 ID 就为 app/bootstrap.

版本控制

那有人问了,那我们是否也能像默认项目一样对我们的模块也提供版本控制呢?答案是可以的,只要提供相应的参数version即可。 version的添加也是一样,可以通过配置文件和命令行的参数.

spm deploy --src=app --global-config=../config.json --local=../../ --version=1.0.0

那么现在对应的bootstrap.js他的 ID 就为 app/1.0.0/bootstrap. 其中版本号也会在生成到 assets 中的目录中有体现.

Clone this wiki locally