JavaScript编译配置
JavaScript编译配置使用boi.spec
API:
boi.spec('js',<options>);
第一个参数代表需要配置的模块,JavaScript对应value为js
。
options
包括以下可配置项:
ext
:String
,源文件扩展类型,默认为js
;source
:String
,js源文件的二级目录名称,相对于[basic](config.basic.md).source
。默认为js
;output
:String
,编译输出js文件的二级目录名称,相对于[basic](config.basic.md).output
。默认为js
;mainFilePrefix
:String
,js主文件的命名前缀,默认为main
。也就是说,默认的js主文件名为main.[name].[ext]
;boi会将js主文件作为编译入口,所以主文件的命名规则必须严格遵守,否则会导致找不到编译入口文件。
uglify
:Boolean
,编译输出的js文件内容是否混淆压缩,默认为true
;useHash
:Boolean
,编译输出的js文件名是否加上hash指纹,默认为true
。也就是说,默认的编译输出js文件名为main.[name].[hash].js
;asyncModuleHash
:Boolean
,编译输出的异步模块js文件名是否加上hash指纹,默认为true
。也就是说,默认编译输出的异步js文件名为[appname].[moduleName].[hash].js
。详细情况请查阅模块化开发文档;splitCommonModule
:Boolean
,是否提取公共模块并将其单独打包成一个文件,默认为false
。此配置项是性能优化的选项,根据应用场景不同有两种方案:- 当存在多个js主文件并且存在公共模块时,将这些公共模块与webpack runtime整合单独打包成一个js文件,利于浏览器缓存;
- 当只存在一个js主文件时,将这些webpack runtime整合单独打包成一个js文件;
lint
:Boolean
,是否进行代码规范测试,默认为false
。boi使用eslint作为js规范测试工具;lintConfigFile
:String
,指定自定义的eslint配置文件。默认使用Airbnb JavaScript规范。你可以通过此配置项指定eslint配置json文件,如下:lintConfigFile: './eslint_config.json'
lintConfigFile
取值有两种方式:- 相对于项目根目录的相对路径;
- 绝对路径。
define
:Object
,定义编译过程需要替换的变量。通过此配置项,可以定义将源代码中指定的变量在编译之后替换为指定的对应内容。比如有如下boi配置:boi.spec('js',{ define: { API: '/login' } });
源码中有以下代码:
$.ajax({ url: API, dataType: 'jsonp', success: function(res){ // success } });
执行
boi build
之后,编译输出的文件如下:$.ajax({ url: '/login', dataType: 'jsonp', success: function(res){ // success } });
源码中的
API
经编译后被替换为/login
。结合
define
配置项和boi的编译环境配置功能,可以针对不同的环境自动生成对应的内容。比如有以下boi配置:boi.spec('js',{ dev: { define: { API: '/login' } }, testing: { define: { API: '//passport.test.com/login' } }, prod: { define: { API: '//passport.app.com/login' } } });
files
:Object
,指定需要编译的js主文件。如果不配置此选项,boi会自动查找所有符合规则的js文件作为入口文件,如果你只想编译某些指定的文件,可以使用此配置项指定。如下:boi.spec('js',{ files: { main: { 'index': 'main.index.js', 'auth': 'main.auth.js' }, common: ['vue','vue-router'] } });
files
有两个子配置项:main
:Object
,指定主js文件,也就是编译入口文件,key-value格式。其中:- key代表文件名
[name]
,决定编译输出的文件名[name].[hash].js
; - value代表对应的源文件名,必须是存在于
source
指定目录下的文件名。请注意,value的取值必须符合mainFilePrefix
和ext
规则,否则无法识别。
- key代表文件名
common
:Array|undefined|null
,指定需要提取的公共模块。 上述代码将vue和vue-router文件提取出来,与webpack runtime共同打包成一个独立的common文件;如果赋值为空数组将会提取webpack runtime单独打包;如果为空值则不会提取公共模块。此配置项与splitCommonModule
的目标一致,为了更利于浏览器缓存。