-
Notifications
You must be signed in to change notification settings - Fork 179
Spm build 之自定义目录结构
在上一篇文章中我们已经介绍了基于默认的目录结构的模块打包,其这篇文章主要针对任意目录结构的项目打包。下面涉及到的例子,用户可以根据自己项目的特点进行调整。
对于目录结构,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目录中执行.
- 源文件
- 模块输出配置
这两个是必须提供的,其中我们提供了多种方式来让用户指定这两个参数:
spm deploy --src=app --local=../../
执行完这个命令后就会把app下面的代码进行简单的处理,部署到assets目录中了。不过由于缺少模块输出配置,所以目前执行的操作仅仅是代码压缩。 好,下面我们就看下合并输出配置
合并输出规则很多,对于简单的规则我们可以通过命令行来完成:
spm deploy --src=app --output.bootstrap=.
这个命令的含义就是输出bootstrap这个模块,并会合并他内部的依赖模块. 由于命令行参数有限制,对于有些输出规则不太好通过命令行参数来描述,这样通过配置文件的方式是更好的选择。
- 命令行 output 规则描述可以参看:https://github.com/seajs/spm/issues/219
- 配置 output 规则描述可以参看 output 配置详解 那么就看看如何加载配置文件呢:
- 在js目录中添加 package.json 文件。这样 SPM 在执行的时候就会默认进行加载
- 也可以通过 --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 中的目录中有体现.