Skip to content
leeight edited this page Jul 2, 2014 · 7 revisions

通常,一个前端项目从开发环境到线上环境,需要进行一系列的构建处理过程:Less编译、文件合并、JS压缩、添加版本信息等。EDP提供了相应的Build工具,用于进行项目构建

构建一个项目

通过以下命令,可以构建一个项目。

$ edp build

指定输出目录

默认的构建结果输出目录是当前目录下的output目录。如果想要修改输出目录,可以通过--output或者-o参数指定。

$ edp build --output ../myproject-dist

强制覆盖

如果输出目录已经存在,构建过程将不会继续。如果想要强制覆盖当前输出目录下的内容,可以通过-f参数。指定该参数后,构建前将清空输出目录下所有文件,请大家小心。

$ edp build -f

指定构建配置文件

默认的构建配置文件为当前目录下的edp-build-config.js配置文件是一个暴露相关指定属性和方法的node module,可以通过--config参数指定。

$ edp build --config my-build-conf.js

构建过程

EDP的构建过程分成3步:

  1. 输入:读入指定的input目录下的所有文件,input通过配置文件指定。
  2. 处理:使用配置的processors对所有读入的文件内容进行处理。
  3. 输出:将处理结果输出到output目录中,output可以通过配置文件指定,也可以通过--output参数传入。

Build Process

通过配置进行自定义构建

运行edp build时,默认使用的配置文件为当前目录下的edp-build-config.js。如果该文件不存在,将使用默认配置。你可以新建一个edp-build-config.js,或者使用其他文件名,在运行命令时通过--config参数指定。

配置文件是一个node module,EDP在构建时将require它,所以,配置文件后缀必须为.js

下面是EDP的构建默认配置。通过edp提供的项目管理功能来初始化项目时,生成的edp-build-config.js与此不同。

var cwd = process.cwd();
var path = require( 'path' );

exports.input = cwd;
exports.output = path.resolve( cwd, 'output' );

exports.exclude = [
    'tool',
    'doc',
    'test',
    'module.conf',
    'dep/packages.manifest',
    'dep/*/*/test',
    'dep/*/*/doc',
    'dep/*/*/demo',
    'dep/*/*/tool',
    'dep/*/*/*.md',
    'dep/*/*/package.json',
    'edp-*',
    '.edpproj',
    '.svn',
    '.git',
    '.gitignore',
    '.idea',
    '.project',
    'Desktop.ini',
    'Thumbs.db',
    '.DS_Store',
    '*.tmp',
    '*.bak',
    '*.swp',
    'node_module'
];

exports.getProcessors = function () {
    return [
        new LessCompiler(),
        new PathMapper()
    ];
};

exports.injectProcessor = function ( processors ) {
    for ( var key in processors ) {
        global[ key ] = processors[ key ];
    }
};

我们建议:通过edp提供的项目管理功能来初始化项目,在其生成的edp-build-config.js上进行构建配置自定义。

在自定义自己的构建配置时,有下面几个东西需要了解和注意:

input

输入目录,{string},默认为当前目录。该属性基本不需要修改。

output

输出目录,{string},默认为当前目录下的output目录

exclude

排除文件,{Array}。该数组里匹配上的每一项,在构建的输入阶段就会被排除,所以,被排除的文件也不会进入后续的处理输出阶段。

数组中的每一项可以是符合minimatch规则的pattern,也可以是正则表达式。例如我只想排除到项目根目录下面的tool目录,而不是所有的tool目录,就可以这么写:

exports.exclude = [
    /^tool\//,
    'Thumbs.db',
    '.DS_Store',
    '*.tmp',
    '*.bak',
    '*.swp'
];

fileEncodings

在处理输入文件的过程中,edp默认所有的文本文件都是utf-8编码的,如果有一些特殊编码的文件,需要在这个参数中声明,这样子才能保证输出的时候文件编码保持不变。

exports.fileEncodings = {
    'src/common/img/channel-example-csv.csv': 'gbk'
}

getProcessors

处理器列表,{Array} function。该方法会被EDP在构建时调用,获取构建过程的Processors。

EDP提供了许多内置Processors,基本可以满足前端项目的构建需求。你可以使用内置Processors,也可以扩展自己的Processor。我们在Build Processors文档对此进行了详细说明。

injectProcessor

该方法用于EDP将内置的Processors注入到配置模块中,从而在配置模块里可以使用内置Processors。请保持该方法的存在,并使用默认实现,不要修改它。

Hello World

Clone this wiki locally