54.9d82aee4.js 110.4 KB
Newer Older
J
JiM-W 已提交
1
(window.webpackJsonp=window.webpackJsonp||[]).push([[54],{468:function(t,a,s){t.exports=s.p+"assets/img/fingerprint.bdf6ab3b.jpg"},499:function(t,a,s){"use strict";s.r(a);var n=s(17),e=Object(n.a)({},(function(){var t=this,a=t.$createElement,n=t._self._c||a;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h1",{attrs:{id:"配置"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#配置"}},[t._v("#")]),t._v(" 配置")]),t._v(" "),n("p",[t._v("针对项目、组件、路由等的特定配置,以满足各种方式的需求。")]),t._v(" "),n("h2",{attrs:{id:"组件配置"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#组件配置"}},[t._v("#")]),t._v(" 组件配置")]),t._v(" "),n("p",[t._v("组件基础配置及各端差异配置,包括组件引入等。")]),t._v(" "),n("p",[t._v("组件的配置以 json 对象的格式配置在.cml 文件中,结构如下:")]),t._v(" "),n("div",{staticClass:"language-vue extra-class"},[n("pre",{pre:!0,attrs:{class:"language-vue"}},[n("code",[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("cml-type")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("json"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),n("span",{pre:!0,attrs:{class:"token script"}},[n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"base"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n    "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"usingComponents"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n      "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"navi"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/components/navi/navi"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n      "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"c-cell"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/components/c-cell/c-cell"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n      "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"c-list"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/components/c-list/c-list"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n      "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"navi-npm"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"cml-test-ui/navi/navi"')]),t._v("\n    "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"wx"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"alipay"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"baidu"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"web"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"weex"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("script")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])])]),n("ul",[n("li",[t._v("base 对象为各端共用的配置对象。")]),t._v(" "),n("li",[t._v("wx、web、weex 分别对应三端特有的配置对象,base 的配置会应用到每一端的配置,内部做的 merge。")]),t._v(" "),n("li",[n("code",[t._v("usingComponents")]),t._v("字段是目前最重要的配置,各端都会使用,小程序规定页面的 json 文件中配置使用到的组件。web 和 Weex 端的构建时也是根据该字段去找到相应的组件进行自动化的注册。所以用到组件必须进行配置")]),t._v(" "),n("li",[n("code",[t._v("usingComponents")]),t._v("中组件的引用地址。\n"),n("ul",[n("li",[t._v("支持引用 src 和 node_modules 下的组件,地址"),n("strong",[t._v("禁止包含后缀扩展名")]),t._v("\n"),n("ul",[n("li",[t._v("src 下可以写相对路径,也可以写相对于 src 的绝对路径,例如"),n("code",[t._v("/components/**")]),t._v(",")]),t._v(" "),n("li",[t._v("node_modules 下的组件,不需要写 node_modules,直接从 npm 的包名称开始写例如"),n("code",[t._v("cml-test-ui/navi/navi")]),t._v("")])])]),t._v(" "),n("li",[t._v("引用的组件类型支持:\n"),n("ul",[n("li",[t._v(".cml 扩展名跨端组件")]),t._v(" "),n("li",[t._v(".vue 扩展名的 vue、weex 组件,"),n("RouterLink",{attrs:{to:"/docs/poly.html#多态组件"}},[t._v("仅在多态组件可用")])],1),t._v(" "),n("li",[t._v("小程序组件文件夹路径,"),n("RouterLink",{attrs:{to:"/docs/poly.html#多态组件"}},[t._v("仅在多态组件可用")])],1),t._v(" "),n("li",[t._v(".js 扩展名的 react 组件,"),n("RouterLink",{attrs:{to:"/docs/poly.html#多态组件"}},[t._v("仅在多态组件可用")])],1)])])])]),t._v(" "),n("li",[t._v("\b 小程序端所需要的一些配置,写在各自的特有配置对象中")])]),t._v(" "),n("h2",{attrs:{id:"路由配置"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#路由配置"}},[t._v("#")]),t._v(" 路由配置")]),t._v(" "),n("p",[t._v("项目统一路由配置,CML 项目内置了一套各端统一的路由配置方式。")]),t._v(" "),n("h3",{attrs:{id:"路由配置文件"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#路由配置文件"}},[t._v("#")]),t._v(" 路由配置文件")]),t._v(" "),n("p",[n("code",[t._v("src/router.config.json")]),t._v("是路由的配置文件,内容如下:")]),t._v(" "),n("div",{staticClass:"language-javascript extra-class"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mode"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"history"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"domain"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https://www.chameleon.com"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"routes"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n    "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n      "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"url"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/cml/h5/index"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n      "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"path"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/pages/index/index"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n      "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mock"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"index.php"')]),t._v("\n    "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),n("ul",[n("li",[n("p",[t._v("mode 为 Web 端路由模式,分为"),n("code",[t._v("hash")]),t._v(""),n("code",[t._v("history")]),t._v("")])]),t._v(" "),n("li",[n("p",[t._v("domain,当 mode 为 hash 时 domain 为 Web 端页面的最终访问地址,当 mode 为 history 时,domain 为 Web 端页面的域名。")])]),t._v(" "),n("li",[n("p",[t._v("routes 为路由配置")]),t._v(" "),n("ul",[n("li",[t._v("path 为路由对应的 cml 文件的路径,以 src 目录下开始的绝对路径,以/开头。")]),t._v(" "),n("li",[t._v("url,当 mode 为 hash 时 url 为 Web 端页面地址对应的 hash,当 mode 为 history 时,url 为 Web 端页面的路径。")]),t._v(" "),n("li",[t._v("mock 为该路由对应的 Mock 文件(仅模拟模板下发需要)")])])]),t._v(" "),n("li",[n("p",[t._v("小程序端,构建时会将"),n("code",[t._v("router.config.json")]),t._v("的内容,插入到 app.json 的 pages 字段,实现小程序端的路由。")])]),t._v(" "),n("li",[n("p",[n("b",[t._v("注: "),n("code",[t._v("router.config.json")]),t._v("中的 domain 指定页面最终线上地址,只是用于 config.json 的生成,真正决定 web 页面访问地址的还是取决于 web 服务器的配置。")])])])]),t._v(" "),n("p",[t._v("注:"),n("RouterLink",{attrs:{to:"/tutorial/deploy-guide.html#apiPrefix、publicPath、router.config.json、cmlUrl的关系"}},[t._v("apiPrefix、publicPath、router.config.json、cmlUrl 的关系")])],1),t._v(" "),n("h3",{attrs:{id:"使用路由场景"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#使用路由场景"}},[t._v("#")]),t._v(" 使用路由场景")]),t._v(" "),n("ul",[n("li",[n("RouterLink",{attrs:{to:"/api/#路由导航"}},[t._v("应用内路由")])],1),t._v(" "),n("li",[n("RouterLink",{attrs:{to:"/api/#打开关闭页面"}},[t._v("跨应用路由")])],1)]),t._v(" "),n("h2",{attrs:{id:"项目配置"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#项目配置"}},[t._v("#")]),t._v(" 项目配置")]),t._v(" "),n("p",[t._v("不同端、不同模式的差异化构建配置。")]),t._v(" "),n("p",[t._v("本文档描述了项目配置的全部参数及使用方法。")]),t._v(" "),n("h3",{attrs:{id:"配置一览表"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#配置一览表"}},[t._v("#")]),t._v(" 配置一览表")]),t._v(" "),n("h4",{attrs:{id:"项目全局配置"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#项目全局配置"}},[t._v("#")]),t._v(" 项目全局配置")]),t._v(" "),n("table",[n("tr",[n("th",[t._v("字段名")]),t._v(" "),n("th",[t._v("类型")]),t._v(" "),n("th",[t._v("可选值")]),t._v(" "),n("th",[t._v("说明")]),t._v(" "),n("th",[t._v("备注")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#web端页面文件类型"}},[t._v("templateType")])]),t._v(" "),n("td",[t._v("String")]),t._v(" "),n("td",[t._v("html[默认]、smarty")]),t._v(" "),n("td",[t._v("web端构建出的页面文件类型")]),t._v(" "),n("td")]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#web端页面文件名称"}},[t._v("projectName")])]),t._v(" "),n("td",[t._v("String")]),t._v(" "),n("td",[t._v("-")]),t._v(" "),n("td",[t._v("web端构建出的页面文件名称")]),t._v(" "),n("td")]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#模板语法"}},[t._v("templateLang")])]),t._v(" "),n("td",[t._v("String")]),t._v(" "),n("td",[t._v("cml[默认]、vue")]),t._v(" "),n("td",[t._v("视图层模版语法")]),t._v(" "),n("td",[t._v("两种语法不可混用")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#支持端配置"}},[t._v("platforms")])]),t._v(" "),n("td",[t._v("Array[String]")]),t._v(" "),n("td",[t._v("['web','weex','wx','alipay','baidu']")]),t._v(" "),n("td",[t._v("当前项目支持端配置")]),t._v(" "),n("td")]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#关闭某一端构建"}},[t._v("devOffPlatform")])]),t._v(" "),n("td",[t._v("Array[String]")]),t._v(" "),n("td",[t._v("['web','weex','wx','alipay','baidu']")]),t._v(" "),n("td",[t._v("dev模式下关闭部分端构建")]),t._v(" "),n("td")]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#关闭某一端构建"}},[t._v("buildOffPlatform")])]),t._v(" "),n("td",[t._v("Array[String]")]),t._v(" "),n("td",[t._v("['web','weex','wx','alipay','baidu']")]),t._v(" "),n("td",[t._v("build模式下关闭部分端构建")]),t._v(" "),n("td")]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#语法检查"}},[t._v("enableLinter")])]),t._v(" "),n("td",[t._v("Boolean")]),t._v(" "),n("td",[t._v("true[默认]、false")]),t._v(" "),n("td",[t._v("是否开启chameleon的语法检查")]),t._v(" "),n("td")]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#多态校验控制"}},[t._v("check")])]),t._v(" "),n("td",[t._v("Object")]),t._v(" "),n("td",[t._v("-")]),t._v(" "),n("td",[t._v("多态校验控制")]),t._v(" "),n("td")]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#多态校验控制"}},[t._v("check.enable")])]),t._v(" "),n("td",[t._v("Boolean")]),t._v(" "),n("td",[t._v("true[默认]、false")]),t._v(" "),n("td",[t._v("是否开启多态语法校验")]),t._v(" "),n("td")]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#多态校验控制"}},[t._v("check.enableTypes")])]),t._v(" "),n("td",[t._v("Array[String]")]),t._v(" "),n("td",[t._v("['Object','Array','Nullable']")]),t._v(" "),n("td",[t._v("Object表示多态协议中传递数据为对象时不校验内部具体数据,Array表示多态协议中传递数据为数组时不校验内部具体数据,Nullable表示某些参数不是必传")]),t._v(" "),n("td",[t._v("谨慎使用,确定的输入数据结构会提高代码维护性!")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#全局变量校验"}},[t._v("enableGlobalCheck")])]),t._v(" "),n("td",[t._v("Boolean")]),t._v(" "),n("td",[t._v("true、false")]),t._v(" "),n("td",[t._v("是否开启全局变量校验")]),t._v(" "),n("td")]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#全局变量校验白名单"}},[t._v("globalCheckWhiteList")])]),t._v(" "),n("td",[t._v("Array[String|RegExp] ")]),t._v(" "),n("td",[t._v("-")]),t._v(" "),n("td",[t._v("文件校验白名单,配置后可不校验改文件")]),t._v(" "),n("td")]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#dev服务端口"}},[t._v("devPort")])]),t._v(" "),n("td",[t._v("Number")]),t._v(" "),n("td",[t._v("8000[默认]")]),t._v(" "),n("td",[t._v("dev模式启动的web服务端口,默认从8000开始查找空闲端口")]),t._v(" "),n("td")]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#配置babel-loader不处理的文件"}},[t._v("excludeBablePath")])]),t._v(" "),n("td",[t._v("Array[String|RegExp]")]),t._v(" "),n("td",[t._v("-")]),t._v(" "),n("td",[t._v("配置babel-loader不处理文件")]),t._v(" "),n("td")]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#配置babel-loader处理的文件"}},[t._v("babelPath")])]),t._v(" "),n("td",[t._v("Array[String|RegExp]")]),t._v(" "),n("td",[t._v("-")]),t._v(" "),n("td",[t._v("配置babel-loader处理文件")]),t._v(" "),n("td")]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#cmss处理"}},[t._v("cmss")])]),t._v(" "),n("td",[t._v("Object")]),t._v(" "),n("td",[t._v("-")]),t._v(" "),n("td",[t._v("cml相关配置,仅web端有效")]),t._v(" "),n("td")]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#cmss处理"}},[t._v("cmss.rem")])]),t._v(" "),n("td",[t._v("Boolean")]),t._v(" "),n("td",[t._v("true[默认]、false")]),t._v(" "),n("td",[t._v("样式单位是否编译为rem")]),t._v(" "),n("td")]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#cmss处理"}},[t._v("cmss.scale")])]),t._v(" "),n("td",[t._v("Number")]),t._v(" "),n("td",[t._v("0.5[默认]")]),t._v(" "),n("td",[t._v("cmss.rem为false时有效,尺寸换算规则 cpx * cmss.scale = px")]),t._v(" "),n("td")]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#禁用基础样式"}},[t._v("baseStyle")])]),t._v(" "),n("td",[t._v("Object")]),t._v(" "),n("td",[t._v("-")]),t._v(" "),n("td",[t._v("禁用基础样式")]),t._v(" "),n("td")]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#禁用基础样式"}},[t._v("baseStyle[platform]")])]),t._v(" "),n("td",[t._v("Boolean")]),t._v(" "),n("td",[t._v("true、false")]),t._v(" "),n("td",[t._v("禁用该端基础样式,platfrom为:web|weex|wx|alipay|baidu")]),t._v(" "),n("td",[t._v("baseStyle.web为false时不插入web端基础样式,其他端同理")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#全局引用npm组件库"}},[t._v("cmlComponents")])]),t._v(" "),n("td",[t._v("Array[String]")]),t._v(" "),n("td",[t._v("['cml-ui']")]),t._v(" "),n("td",[t._v("全局自动引入组件库")]),t._v(" "),n("td",[t._v("当设置该项之后可以直接使用改库下所有组件,无需手动引入")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#配置子项目"}},[t._v("subProject")])]),t._v(" "),n("td",[t._v("Array[String|Object]")]),t._v(" "),n("td",[t._v("-")]),t._v(" "),n("td",[t._v("配置项目中引入的子项目")]),t._v(" "),n("td",[t._v("子项目的可以通过对象或者字符串的方式配置")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#项目优化"}},[t._v("optimize")])]),t._v(" "),n("td",[t._v("Object")]),t._v(" "),n("td",[t._v("-")]),t._v(" "),n("td",[t._v("优化项目构建")]),t._v(" "),n("td",[t._v("chameleon-tool@1.0.5-alpha.1开始支持")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#全局样式"}},[t._v("globalStyleConfig")])]),t._v(" "),n("td",[t._v("Object")]),t._v(" "),n("td",[t._v("-")]),t._v(" "),n("td",[t._v("支持全局样式,便于修改内置组件样式")]),t._v(" "),n("td",[t._v("chameleon-tool@1.0.5-alpha.1开始支持")])])]),t._v(" "),n("h4",{attrs:{id:"平台内构建配置"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#平台内构建配置"}},[t._v("#")]),t._v(" 平台内构建配置")]),t._v(" "),n("p",[t._v("平台内构建配置是针对某一端执行命令构建时的特殊配置。")]),t._v(" "),n("table",[n("tr",[n("th",[t._v("字段名")]),t._v(" "),n("th",[t._v("类型")]),t._v(" "),n("th",[t._v("可选值")]),t._v(" "),n("th",[t._v("说明")]),t._v(" "),n("th",[t._v("备注")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#资源发布路径"}},[t._v("publicPath")])]),t._v(" "),n("td",[t._v("String")]),t._v(" "),n("td",[t._v("-")]),t._v(" "),n("td",[t._v("静态资源发布路径")]),t._v(" "),n("td",[t._v("设置该字段执行构建时静态资源地址将改为该地址")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#\b\bapi-请求前缀"}},[t._v("apiPrefix")])]),t._v(" "),n("td",[t._v("String")]),t._v(" "),n("td",[t._v("-")]),t._v(" "),n("td",[t._v("接口请求地址地址")]),t._v(" "),n("td",[t._v("设置该字段调用请求时如果请求路径不是全路径则拼接该地址")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#文件指纹"}},[t._v("hash")])]),t._v(" "),n("td",[t._v("Boolean")]),t._v(" "),n("td",[t._v("true[build默认]、false[dev默认]")]),t._v(" "),n("td",[t._v("构建出的文件名是否带hash")]),t._v(" "),n("td",[t._v("用于更新浏览器缓存")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#代码压缩"}},[t._v("minimize")])]),t._v(" "),n("td",[t._v("Boolean")]),t._v(" "),n("td",[t._v("true[build默认]、false[dev默认]")]),t._v(" "),n("td",[t._v("构建出的文件是否进行代码压缩")]),t._v(" "),n("td")]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#热更新与自动刷新"}},[t._v("hot")])]),t._v(" "),n("td",[t._v("Boolean")]),t._v(" "),n("td",[t._v("true[默认]、false")]),t._v(" "),n("td",[t._v("控制是否开启热更新")]),t._v(" "),n("td",[t._v("web端有效")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#打包资源分析"}},[t._v("analysis")])]),t._v(" "),n("td",[t._v("Boolean")]),t._v(" "),n("td",[t._v("true[默认]、false")]),t._v(" "),n("td",[t._v("是否\b打开webpack打包分析工具")]),t._v(" "),n("td")]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#调试窗口"}},[t._v("console")])]),t._v(" "),n("td",[t._v("Boolean")]),t._v(" "),n("td",[t._v("false[默认]、true")]),t._v(" "),n("td",[t._v("控制是否打开页面上的调试窗口")]),t._v(" "),n("td",[t._v("web端有效")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#\b\b内置变量"}},[t._v("definePlugin")])]),t._v(" "),n("td",[t._v("Object")]),t._v(" "),n("td",[t._v("-")]),t._v(" "),n("td",[t._v("定义运行时内部变量")]),t._v(" "),n("td")]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#模块标识类型"}},[t._v("moduleIdType")])]),t._v(" "),n("td",[t._v("String")]),t._v(" "),n("td",[t._v("number、hash、name")]),t._v(" "),n("td",[t._v("设置webpack打包模块的id类型")]),t._v(" "),n("td")]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#babelpolyfill"}},[t._v("babelPolyfill")])]),t._v(" "),n("td",[t._v("Boolean")]),t._v(" "),n("td",[t._v("默认 false")]),t._v(" "),n("td",[t._v("是否添加polyfill")]),t._v(" "),n("td",[t._v("web端@babel/polyfill 小程序端"),n("a",{attrs:{href:"https://github.com/didi/chameleon/blob/0.3.x-alpha/packages/chameleon-tool/configs/default/miniappPolyfill.js"}},[t._v("miniappPolyfill")]),t._v(" weex端 "),n("a",{attrs:{href:"https://github.com/didi/chameleon/blob/0.3.x-alpha/packages/chameleon-tool/configs/default/weexPolyfill.js"}},[t._v("weexPolyfill")])])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"#domain-多域名请求前缀"}},[t._v("domain")])]),t._v(" "),n("td",[t._v("Object")]),t._v(" "),n("td",[t._v("默认 {}")]),t._v(" "),n("td",[t._v("多域名请求前缀")]),t._v(" "),n("td")])]),t._v(" "),n("h3",{attrs:{id:"配置文件"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#配置文件"}},[t._v("#")]),t._v(" 配置文件")]),t._v(" "),n("p",[t._v("CML 的构建过程是配置化的,项目的根目录下提供一个 chameleon.config.js 文件,在该文件中可以使用全局对象 CML 的 api 去操作配置对象。例如:")]),t._v(" "),n("div",{staticClass:"language-javascript extra-class"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 设置静态资源的线上路径")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" publicPath "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'//www.static.chameleon.com/static'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 设置 API 请求前缀")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" apiPrefix "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'https://api.chameleon.com'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 合并配置")]),t._v("\ncml"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  templateType"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'html'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  projectName"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Chameleon'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  base"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n    dev"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n      domain1"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'localhost'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n      domain2"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'localhost'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    build"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n      domain1"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'http://www.cml1.com'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n      domain1"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'http://www.cml2.com'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  web"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n    dev"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n      hot"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n      console"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    build"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n      publicPath"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token template-string"}},[n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),n("span",{pre:!0,attrs:{class:"token interpolation"}},[n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("publicPath"),n("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("/web")]),n("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n      apiPrefix"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("h3",{attrs:{id:"配置-api"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#配置-api"}},[t._v("#")]),t._v(" 配置 api")]),t._v(" "),n("ul",[n("li",[n("code",[t._v("cml.config.merge(obj)")]),t._v(" merge 方式修改配置。")]),t._v(" "),n("li",[n("code",[t._v("cml.config.assign(obj)")]),t._v(" assign 方式修改配置")]),t._v(" "),n("li",[n("code",[t._v("cml.config.get()")]),t._v(" 获取 config 配置")])]),t._v(" "),n("h3",{attrs:{id:"配置对象结构"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#配置对象结构"}},[t._v("#")]),t._v(" 配置对象结构")]),t._v(" "),n("p",[t._v("配置对象的第一级为全局配置,例如"),n("code",[t._v("projectName")]),t._v(",全局配置中有各平台内的配置对象,例如"),n("code",[t._v("web、wx、weex")]),t._v("等。"),n("b",[t._v("其中"),n("code",[t._v("base")]),t._v("对象用于配置各个平台对象的公共部分")]),t._v("")]),t._v(" "),n("p",[t._v("平台对象内部分为各 media 的配置对象,例如"),n("code",[t._v("dev、build")]),t._v("")]),t._v(" "),n("h3",{attrs:{id:"配置详解"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#配置详解"}},[t._v("#")]),t._v(" 配置详解")]),t._v(" "),n("p",[t._v("下面就详细介绍配置中的功能。")]),t._v(" "),n("h4",{attrs:{id:"web-端页面文件-类型"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#web-端页面文件-类型"}},[t._v("#")]),t._v(" Web 端页面文件 \b 类型")]),t._v(" "),n("p",[n("code",[t._v("templateType")]),t._v(", String 类型。"),n("br"),t._v("\n该字段控制 Web 端构建 \b 出的页面文件类型。")]),t._v(" "),n("ul",[n("li",[n("code",[t._v("templateType: 'html'")]),t._v(" 构建出.html 文件,纯前端模板")]),t._v(" "),n("li",[n("code",[t._v("templateType: 'smarty'")]),t._v(" 构建出.tpl 文件")])]),t._v(" "),n("p",[t._v("例如:")]),t._v(" "),n("div",{staticClass:"language-javascript extra-class"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[t._v("cml"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  templateType"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'html'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("h4",{attrs:{id:"web-端页面文件名称"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#web-端页面文件名称"}},[t._v("#")]),t._v(" Web 端页面文件名称")]),t._v(" "),n("p",[n("code",[t._v("projectName")]),t._v(", String 类型。")]),t._v(" "),n("p",[t._v("该字段控制 Web 端构建 \b 出的模板文件名称,默认是当前项目的根目录文件夹名称。")]),t._v(" "),n("p",[t._v("例如:")]),t._v(" "),n("div",{staticClass:"language-javascript extra-class"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[t._v("cml"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  projectName"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'\btest_cml'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  templateType"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'html'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("p",[t._v("Web 端构建出 "),n("code",[t._v("test_cml.html")]),t._v("文件")]),t._v(" "),n("h4",{attrs:{id:"模板语法"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#模板语法"}},[t._v("#")]),t._v(" 模板语法")]),t._v(" "),n("p",[n("code",[t._v("templateLang")]),t._v(", String 类型。"),n("br"),t._v("\nCML 的视图层支持两种模板语法,通过在 template\b\b 上的"),n("code",[t._v("lang")]),t._v("属性做区分,如果不写默认是 CML 语法。"),n("br"),t._v("\n该字段控制"),n("code",[t._v("init page 和init component")]),t._v("\b 时生成的 cml 文件的 template 模板上的"),n("code",[t._v("lang属性")]),t._v(""),n("br"),t._v("\n例如:")]),t._v(" "),n("div",{staticClass:"language-javascript extra-class"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[t._v("cml"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  templateLang"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'\bcml'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("h4",{attrs:{id:"支持端配置"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#支持端配置"}},[t._v("#")]),t._v(" 支持端配置")]),t._v(" "),n("p",[n("code",[t._v("platforms")]),t._v(", Array[String]类型。\n\b 配置当前项目支持的 \b 端,该配置决定"),n("code",[t._v("cml dev")]),t._v(""),n("code",[t._v("cml build")]),t._v("命令启动构建的端,决定"),n("code",[t._v("cml init")]),t._v("命令初始化多态接口和多态组件时只生成相应端代码。\n例如:")]),t._v(" "),n("div",{staticClass:"language-javascript extra-class"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[t._v("cml"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  platforms"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'web'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'wx'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("p",[n("code",[t._v("cml dev")]),t._v(""),n("code",[t._v("cml build")]),t._v("只启动 web 和 wx 端的构建。")]),t._v(" "),n("h4",{attrs:{id:"关闭某一端构建"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#关闭某一端构建"}},[t._v("#")]),t._v(" 关闭某一端构建")]),t._v(" "),n("p",[n("code",[t._v("devOffPlatform和buildOffPlatform")]),t._v(", Array[String] 类型。\n\b 当我们执行"),n("code",[t._v("cml dev")]),t._v(""),n("code",[t._v("cml build")]),t._v(" 时会自动构建输出 \b 所有平台的代码,可以通过这两个字段控制不需要构建的平台,目前支持取值"),n("code",[t._v('["web","wx","weex"]')]),t._v("\n例如:")]),t._v(" "),n("div",{staticClass:"language-javascript extra-class"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[t._v("cml"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  devOffPlatform"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'wx'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  buildOffPlatform"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'wx'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("h4",{attrs:{id:"语法检查"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#语法检查"}},[t._v("#")]),t._v(" 语法检查")]),t._v(" "),n("p",[n("code",[t._v("enableLinter")]),t._v(", Boolean \b 类型。")]),t._v(" "),n("p",[t._v("默认为 "),n("code",[t._v("true")]),t._v(",是否开启 CML 的语法检查,会在命令行提示语法错误。\n例如:")]),t._v(" "),n("div",{staticClass:"language-javascript extra-class"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[t._v("cml"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  enableLinter"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("h4",{attrs:{id:"多态校验控制"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#多态校验控制"}},[t._v("#")]),t._v(" 多态校验控制")]),t._v(" "),n("p",[n("code",[t._v("check")]),t._v(", Object 类型。\nCML 提供了多态接口与多态组件的写法,同时为了保证代码的质量提供了多态校验的方法,可以通过"),n("code",[t._v("check")]),t._v("字段进行校验的控制。")]),t._v(" "),n("p",[n("code",[t._v("check.enable")]),t._v(", Boolean 类型。 控制是否开启多态校验,默认"),n("code",[t._v("true")]),t._v("")]),t._v(" "),n("p",[n("code",[t._v("check.enableTypes")]),t._v(", Array[String] 类型。 \b 可取值"),n("code",[t._v('["Object","Array","Nullable"]')]),t._v(",控制校验中是否可以定义直接定义 Object 和 Array 类型,和 \b 是否可以定义可为空类型,默认值为"),n("code",[t._v("[]")]),t._v("\n例如:")]),t._v(" "),n("div",{staticClass:"language-javascript extra-class"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[t._v("cml"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  check"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n    enable"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    enableTypes"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Object'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Array'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Nullable'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("h4",{attrs:{id:"全局变量校验"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#全局变量校验"}},[t._v("#")]),t._v(" 全局变量校验")]),t._v(" "),n("p",[n("code",[t._v("enableGlobalCheck")]),t._v(", Boolean 类型。"),n("br"),t._v("\n默认是 false,(chameleon-tool 0.2.0 版本及之后默认为 true),控制是否进行全局变量的检验。")]),t._v(" "),n("p",[t._v("例如:")]),t._v(" "),n("div",{staticClass:"language-javascript extra-class"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[t._v("cml"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  enableGlobalCheck"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("h4",{attrs:{id:"全局变量校验白名单"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#全局变量校验白名单"}},[t._v("#")]),t._v(" 全局变量校验白名单")]),t._v(" "),n("p",[n("code",[t._v("globalCheckWhiteList")]),t._v(", Array[String|RegExp] 类型。")]),t._v(" "),n("p",[t._v("chameleon 内置了全局变量校验的功能 可以设置白名单不校验某些文件。以文件绝对路径进行匹配,可以是正则表达式径,也可以是字符串的 endWiths。")]),t._v(" "),n("p",[t._v("例如:")]),t._v(" "),n("div",{staticClass:"language-javascript extra-class"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[t._v("cml"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  globalCheckWhiteList"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'jquery.js'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token regex"}},[t._v("/node_modules/")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("p",[t._v("则所有以 "),n("code",[t._v("jquery.js")]),t._v(" 结尾的文件以及 正则匹配 "),n("code",[t._v("/node_modules/")]),t._v(" 的不做校验;")]),t._v(" "),n("h4",{attrs:{id:"dev-服务端口"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#dev-服务端口"}},[t._v("#")]),t._v(" dev 服务端口")]),t._v(" "),n("p",[n("code",[t._v("devPort")]),t._v(", Number 类型。\ndev 模式启动的 web 服务端口,默认是从 8000 开始寻找空闲端口,避免了启动多个项目时的端口冲突问题。如果想指定端口可以使用该参数进行配置。\n例如:")]),t._v(" "),n("div",{staticClass:"language-javascript extra-class"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[t._v("cml"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  devPort"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("8080")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("h4",{attrs:{id:"配置-babel-loader-不处理的文件"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#配置-babel-loader-不处理的文件"}},[t._v("#")]),t._v(" 配置 babel-loader 不处理的文件")]),t._v(" "),n("p",[n("code",[t._v("excludeBablePath")]),t._v(", Array[String|RegExp] 类型。")]),t._v(" "),n("div",{staticClass:"language-javascript extra-class"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" path "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("require")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'path'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\ncml"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  excludeBablePath"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token regex"}},[t._v("/test-exclude/")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" path"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("resolve")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("__dirname"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'./src/excludes'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("p",[t._v("这个配置的结果会作为 webpack 模块配置中 Rule.exclude 的值;")]),t._v(" "),n("h4",{attrs:{id:"配置-babel-loader-处理的文件"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#配置-babel-loader-处理的文件"}},[t._v("#")]),t._v(" 配置 babel-loader 处理的文件")]),t._v(" "),n("p",[n("code",[t._v("babelPath")]),t._v(", Array[String|RegExp] 类型。 默认开发者引入的 node_modules 中的文件不经过 babel,如有文件需要 babel,设置该参数。")]),t._v(" "),n("div",{staticClass:"language-javascript extra-class"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" path "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("require")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'path'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\ncml"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  babelPath"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("path"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("resolve")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("__dirname"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'node_modules/test/'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("p",[t._v("这个配置的结果会作为 webpack 模块配置中 Rule.include 的值;")]),t._v(" "),n("h4",{attrs:{id:"cmss-处理"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#cmss-处理"}},[t._v("#")]),t._v(" cmss 处理")]),t._v(" "),n("p",[n("code",[t._v("cmss")]),t._v(",Object 类型。\n仅用于 Web 端。其中包含 rem 及 scale 属性,Web 端构建时默认将 cpx\b 转为 rem,当不需要时转为 rem 时,将 rem 置为 false,则 scale 参数生效,scale 为像素缩放倍数,默认为 1,会将 cpx 按照 scale 的设置进行缩放为 px。例如:")]),t._v(" "),n("div",{staticClass:"language-javascript extra-class"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[t._v("cml"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  cmss"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n    rem"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    scale"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.5")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("p",[t._v("该设置 Web 端 cpx 不转为 rem,而缩小 1 倍转为 px,例如 10cpx 转为 5px。")]),t._v(" "),n("h4",{attrs:{id:"禁用基础样式"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#禁用基础样式"}},[t._v("#")]),t._v(" 禁用基础样式")]),t._v(" "),n("p",[n("code",[t._v("baseStyle")]),t._v(", Object 类型。\nchameleon 为了让各端样式统一,默认会在全局插入一些基础样式,如果开发者的跨端不需要这些基础样式,可以通过该参数进行设置。key 值为端名称,value 为 Boolean 值,是否插入 \b 基础样式。例如:")]),t._v(" "),n("div",{staticClass:"language-javascript extra-class"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[t._v("cml"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  baseStyle"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n    web"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    wx"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    weex"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("p",[t._v("该设置 web、wx、Weex 端均不插入基础样式。")]),t._v(" "),n("h4",{attrs:{id:"全局引用-npm-组件库"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#全局引用-npm-组件库"}},[t._v("#")]),t._v(" 全局引用 npm 组件库")]),t._v(" "),n("p",[n("code",[t._v("cmlComponents")]),t._v(", Array[String] 类型。\n当我们想把 npm 组件库中的组件全部自动引入,而不需要单独引入时,可以通过该字段配置 npm 包名称。例如 "),n("code",[t._v("cml-ui")]),t._v("是我们提供的一个 npm 组件库,可以进行如下配置:")]),t._v(" "),n("div",{staticClass:"language-javascript extra-class"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[t._v("cml"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  cmlComponents"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'cml-ui'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("p",[t._v("npm 组件库的"),n("code",[t._v("package.json\b")]),t._v("中的"),n("code",[t._v("main")]),t._v("字段可以指定路径,否则就会查找 \bnpm 包中的所有 cml 文件自动引入,自动引入的组件名称为 cml 文件名称。")]),t._v(" "),n("h4",{attrs:{id:"配置子项目"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#配置子项目"}},[t._v("#")]),t._v(" 配置子项目")]),t._v(" "),n("p",[t._v("subProject, Array[String|Object]类型。 当配置项为 Object 时, npmName 表示该子项目的地址(从 node_modules 层级开始配置), isInjectBaseStyle 表示该子项目是否注入基础样式;\n当配置项为 String 时,该值直接表示该子项目的地址(从 node_modules 层级开始配置),此时不支持配置是否注入基础样式,子项目默认注入基础样式。例如:")]),t._v(" "),n("div",{staticClass:"language-javascript extra-class"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[t._v("cml"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  subProject"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n    "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n      npmName"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'@didi/cml-login'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n      isInjectBaseStyle"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'@didi/base-style-test'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("h4",{attrs:{id:"项目优化"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#项目优化"}},[t._v("#")]),t._v(" 项目优化")]),t._v(" "),n("p",[t._v("chameleon-tool@1.0.5-alpha.1 开始支持")]),t._v(" "),n("div",{staticClass:"language-javascript extra-class"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[t._v("cml"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  optimize"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  watchNodeModules"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 默认不对 node_modules中的文件进行 watch,提升编译性能")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("h4",{attrs:{id:"全局样式"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#全局样式"}},[t._v("#")]),t._v(" 全局样式")]),t._v(" "),n("p",[t._v("chameleon-tool@1.0.5-alpha.1 开始支持")]),t._v(" "),n("p",[t._v("使用参考"),n("a",{attrs:{href:"https://github.com/chameleon-team/cml-global-style",target:"_blank",rel:"noopener noreferrer"}},[t._v("demo"),n("OutboundLink")],1)]),t._v(" "),n("div",{staticClass:"language-javascript extra-class"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[t._v("cml"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  globalStyleConfig"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n    "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//globalCssPath 该路径下的样式对非 Weex 端生效;")]),t._v("\n    globalCssPath"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" path"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("join")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("__dirname"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'src/assets/global.config.less'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    weexCssConfig"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n      "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//该文件内的样式会作为全局样式导入")]),t._v("\n      weexCssPath"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" path"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("join")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("__dirname"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'src/assets/global.weex.less'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n      "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//由于weex端本身的限制,假如某些情况下,要覆盖内置组件的某个样式,我们提供了对于该组件注入样式的方式,注入的样式只会对该组件生效")]),t._v("\n      injectCss"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n        "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n          componentPath"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" path"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("join")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n            __dirname"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n            "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'node_modules/cml-ui/components/c-dialog/c-dialog.cml'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n          "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n          cssPath"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" path"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("join")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("__dirname"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'src/assets/c-dialog.less'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n        "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n      "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("h4",{attrs:{id:"构建结果信息"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#构建结果信息"}},[t._v("#")]),t._v(" 构建结果信息")]),t._v(" "),n("p",[n("code",[t._v("buildInfo")]),t._v(", Object 类型。\n"),n("code",[t._v("buildInfo.wxAppId")]),t._v(",String 类型。微信的 appId。")]),t._v(" "),n("p",[t._v("当执行完 cml build 后会生成一个"),n("code",[t._v("config.json\b")]),t._v("文件,该文件存储构建后各平台的页面信息。可以通过这个 json 文件做页面的动态下发,页面降级等等。")]),t._v(" "),n("p",[t._v("例如:")]),t._v(" "),n("div",{staticClass:"language-javascript extra-class"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[t._v("cml"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  buildInfo"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n    wxAppId"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'123456'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("p",[t._v("cml build 后生成 \b 在"),n("code",[t._v("dist/config.json")])]),t._v(" "),n("div",{staticClass:"language-javascript extra-class"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[t._v("    "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n        "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"wx"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n            "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"appId"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"123456"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n            "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"path"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/pages/index/index"')]),t._v("\n        "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n        "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"web"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n            "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"url"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https://api.chameleon.com/cml/h5/index"')]),t._v("\n        "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n        "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"weex"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n            "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"url"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https://static.chameleon.com/pinche/hkcml/weex/hybridkits_pageone_e86b77ae05a015a3a546.js"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n            "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"query"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n                "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"path"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/pages/index/index"')]),t._v("\n            "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n        "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n    "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),n("p",[t._v("config.json 中微信小程序的 appId 是 \b 通过"),n("code",[t._v("buildInfo")]),t._v("配置生成,其他的页面信息是根据"),n("code",[t._v("router.config.json")]),t._v("中的配置生成。")]),t._v(" "),n("p",[t._v("例如:")]),t._v(" "),n("div",{staticClass:"language-javascript extra-class"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[t._v("cml"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  enableLinter"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("h4",{attrs:{id:"构建入口与页面"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#构建入口与页面"}},[t._v("#")]),t._v(" 构建入口与页面 \b")]),t._v(" "),n("p",[t._v("默认的入口与页面集成在命令行中,对于有特殊 \b 需求的开发者,CML 提供了可以自定义 Web 端构建入口与页面,Weex 端构建入口的功能。\n"),n("code",[t._v("entry")]),t._v(", Object \b 类型。\n"),n("code",[t._v("entry.template")]),t._v(", String 类型。 页面文件的绝对路径。\n"),n("code",[t._v("entry.web")]),t._v(", String 类型。 Web 端入口文件的 \b 绝对路径。\n"),n("code",[t._v("entry.weex")]),t._v(", String 类型。 wewx 端入口文件的 \b 绝对路径。\n例如:")]),t._v(" "),n("div",{staticClass:"language- extra-class"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("var path = require('path');\ncml.config.merge({\n  entry: {\n    template: path.resolve('./src/index.html')\n    web: path.resolve('./src/mian.web.js')\n    weex: path.resolve('./src/main.weex.js')\n  }\n})\n")])])]),n("h4",{attrs:{id:"平台内配置"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#平台内配置"}},[t._v("#")]),t._v(" 平台内配置")]),t._v(" "),n("p",[t._v("\b 每一个平台的构建会需要不同的配置,所以针对每一个平台会有一个平台配置对象,平台配置对象中又有多个 media 配置对象,例如 dev 或者 build 的配置。\b 下面讲述的配置项都是放在 media 对象中。例如:\n"),n("code",[t._v("wx web weex")]),t._v("是平台对象,里面的"),n("code",[t._v("dev和build")]),t._v("是 media 对象。")]),t._v(" "),n("div",{staticClass:"language-javascript extra-class"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[t._v("cml"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  wx"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n    dev"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    build"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  web"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n    dev"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    build"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  weex"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n    dev"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    build"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("p",[t._v("以下介绍平台内配置支持的配置项")]),t._v(" "),n("h4",{attrs:{id:"文件指纹"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#文件指纹"}},[t._v("#")]),t._v(" 文件指纹")]),t._v(" "),n("p",[t._v("文件指纹是文件的唯一标识,以文件的内容生成 hash 值作为文件名称的一部分。在开启强缓存的情况下,如果文件的 URL 不发生变化,无法刷新浏览器缓存。文件指纹 \b\b 用于更新浏览器的缓存。小程序端不需要文件指纹。 默认图片资源 \b 开启 hash,build 模式开启 hash。\b 通过"),n("code",[t._v("hash")]),t._v("字段配置。")]),t._v(" "),n("p",[n("code",[t._v("hash")]),t._v(", Boolean 类型。\n\b 控制打包出的 js 和 css 文件是否带 hash 后缀,图片字体等静态资源自动带 hash,其小程序端不支持 hash 参数。")]),t._v(" "),n("p",[t._v("例如:")]),t._v(" "),n("div",{staticClass:"language-javascript extra-class"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[t._v("cml"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  web"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n    dev"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n      hash"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("p",[t._v("下图为 Web 端开启文件指纹的打包结果。\n"),n("img",{attrs:{src:s(468),width:"300px"}})]),t._v(" "),n("h4",{attrs:{id:"代码压缩"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#代码压缩"}},[t._v("#")]),t._v(" 代码压缩")]),t._v(" "),n("p",[t._v("为了减少资源网络传输的大小,通过压缩器对 js、css、图片进行压缩是一直以来前端工程优化的选择。在 CML 中只需要 \b 配置"),n("code",[t._v("minimize")]),t._v("参数。")]),t._v(" "),n("p",[n("code",[t._v("minimize")]),t._v(", Boolean 类型。")]),t._v(" "),n("p",[t._v("\b\b 控制打包出的文件是否进行压缩。")]),t._v(" "),n("p",[t._v("例如:")]),t._v(" "),n("div",{staticClass:"language-javascript extra-class"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[t._v("cml"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  web"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n    dev"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n      minimize"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("h4",{attrs:{id:"资源发布路径"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#资源发布路径"}},[t._v("#")]),t._v(" 资源发布路径")]),t._v(" "),n("p",[n("code",[t._v("publicPath")]),t._v(", String 类型。\n\b\b 控制代码中静态资源的引用路径,\b 线上发布需要用到,media 为 dev 时默认 小程序端是本地路径,web 和 Weex 端是当前 dev 服务的 \b 路径。\n例如:")]),t._v(" "),n("div",{staticClass:"language-javascript extra-class"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[t._v("cml"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  web"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n    build"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n      publicPath"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'http://www.chameleon.com/static'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("h4",{attrs:{id:"热更新与自动刷新"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#热更新与自动刷新"}},[t._v("#")]),t._v(" 热更新与自动刷新")]),t._v(" "),n("p",[t._v("热更新与自动刷新都是提高本地开发效率的手段,当项目中的源代码发生改变时,\b 能够自动的在页面看到改变,其中热更新不需要重新刷新预览的页面。目前只有 Web 端的开发支持热更新,通过"),n("RouterLink",{attrs:{to:"/docs/config.html#代码热更新"}},[t._v("hot 参数配置")]),t._v(""),n("code",[t._v("dev")]),t._v("模式默认自动刷新,Web 端可以选择开启热更新。")],1),t._v(" "),n("p",[n("code",[t._v("hot")]),t._v(", Boolean 类型。")]),t._v(" "),n("p",[t._v("控制是否开启热更新,只在 Web 端生效,开启热更新时,css 代码不会单独分离出来,如果进行线上 js 代理本地 js 调试问题时,请关闭热更新。")]),t._v(" "),n("p",[t._v("例如:")]),t._v(" "),n("div",{staticClass:"language-javascript extra-class"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[t._v("cml"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  web"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n    dev"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n      hot"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("h4",{attrs:{id:"打包资源分析"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#打包资源分析"}},[t._v("#")]),t._v(" 打包资源分析")]),t._v(" "),n("p",[n("code",[t._v("analysis")]),t._v(", Boolean 类型。")]),t._v(" "),n("p",[t._v("控制是否 \b 打开 webpack 打包分析工具, 内部使用的"),n("code",[t._v("webpack-bundle-analyzer")]),t._v("插件。")]),t._v(" "),n("p",[t._v("例如:")]),t._v(" "),n("div",{staticClass:"language-javascript extra-class"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[t._v("cml"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  web"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n    dev"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n      analysis"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("h4",{attrs:{id:"调试窗口"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#调试窗口"}},[t._v("#")]),t._v(" 调试窗口")]),t._v(" "),n("p",[n("code",[t._v("console")]),t._v(", Boolean 类型。")]),t._v(" "),n("p",[t._v("控制是否打开页面上的调试窗口,只在 Web 端有效,方便在真机上进行调试。")]),t._v(" "),n("p",[t._v("例如:")]),t._v(" "),n("div",{staticClass:"language- extra-class"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("cml.config.merge({\n  web: {\n    dev: {\n      console: true\n    }\n  }\n})\n")])])]),n("h4",{attrs:{id:"内置变量"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#内置变量"}},[t._v("#")]),t._v(" \b\b 内置变量")]),t._v(" "),n("p",[n("code",[t._v("definePlugin")]),t._v(", Object 类型,内部使用"),n("code",[t._v("webpack.DefinePlugin")]),t._v("实现,定义运行时的内置变量。\n例如:")]),t._v(" "),n("div",{staticClass:"language- extra-class"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("cml.config.merge({\n  web: {\n    dev: {\n      definePlugin: {\n        'process.env.TEST': JSON.stringify('CML_TEST')\n      }\n    }\n  }\n})\n")])])]),n("h4",{attrs:{id:"api-请求前缀"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#api-请求前缀"}},[t._v("#")]),t._v(" \b\bAPI 请求前缀")]),t._v(" "),n("p",[n("code",[t._v("apiPrefix")]),t._v(", String 类型。\n这个配置与网络请求相关,在 wx 和 Weex 项目中,ajax 的请求不能像 Web 端一样只写相对路径,而是要写带有域名的绝对路径,"),n("code",[t._v("chameleon-api")]),t._v(" 这个基础库,提供了网络请求的 api,"),n("code",[t._v("get、post、request")]),t._v("方法,该方法会在运行时将请求的相对路径上添加配置的"),n("code",[t._v("apiPrefix")]),t._v("。media 是 dev 时 默认为当前 dev 服务的地址,不需要配置。 例如:\n"),n("code",[t._v("chameleon.config.js")])]),t._v(" "),n("div",{staticClass:"language- extra-class"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("// 设置 API 请求前缀\nconst apiPrefix = 'http://api.chameleon.com';\ncml.config.merge({\n  wx: {\n    dev: {\n    },\n    build: {\n      apiPrefix\n    }\n  }\n})\n")])])]),n("div",{staticClass:"language-vue extra-class"},[n("pre",{pre:!0,attrs:{class:"language-vue"}},[n("code",[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),n("span",{pre:!0,attrs:{class:"token script"}},[n("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" cml "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'chameleon-api'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Index")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  methods "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n    "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendGet")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n      cml\n        "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n          url"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'/api/driver/getList'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n          data"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n            name"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'cml'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n            age"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("18")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n          "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n        "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n        "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("then")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("res")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n          console"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n        "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n        "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("catch")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("e")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n          console"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("e"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n        "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n    "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Index")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("script")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])])]),n("p",[t._v("在执行 "),n("code",[t._v("cml wx dev")]),t._v(" 命令构建的结果中,"),n("code",[t._v("cml.get()")]),t._v(" 方法发送的请求是 "),n("code",[t._v("http://172.22.137.29:8000/api/driver/getList")])]),t._v(" "),n("p",[t._v("在执行 "),n("code",[t._v("cml wx build")]),t._v(" 命令构建的结果中,"),n("code",[t._v("cml.get()")]),t._v(" 方法发送的请求是 "),n("code",[t._v("http://api.chameleon.com/api/driver/getList")])]),t._v(" "),n("h4",{attrs:{id:"模块标识类型"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#模块标识类型"}},[t._v("#")]),t._v(" 模块标识类型")]),t._v(" "),n("p",[n("code",[t._v("moduleIdType")]),t._v(",String 类型。\n设置 webpack 打包模块的 id 类型。")]),t._v(" "),n("ul",[n("li",[t._v("number 顺序排列的数组下标。")]),t._v(" "),n("li",[t._v("hash 利用 webpack.HashedModuleIdsPlugin() 模块的 id 类型为模块内容的 hash 值。")]),t._v(" "),n("li",[t._v("name 利用 webpack.NamedModulesPlugin() 模块的 id 类型为文件的路径。")]),t._v(" "),n("li",[t._v("CML 用于 build 模式,模块的 id 类型为模块内容的 hash,并且最终文件的 hash\b 也经过优化处理,根据文件内容绝对 hash 值。\n默认 media 为 dev 时 取值 \b 为 name 方便开发调试, media 为 build 时取值为 CML 保证 hash 值由文件内容决定,更好的做缓存持久化。")])]),t._v(" "),n("p",[t._v("例如:")]),t._v(" "),n("div",{staticClass:"language- extra-class"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v('cml.config.merge({\n  web: {\n    dev: {\n      moduleIdType: "number"\n    }\n  }\n})\n')])])]),n("h4",{attrs:{id:"babelpolyfill"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#babelpolyfill"}},[t._v("#")]),t._v(" babelPolyfill")]),t._v(" "),n("blockquote",[n("p",[t._v("chameleon-tool@0.0.15 开始支持 Web 端\nchameleon-tool@0.3.0 开始支持 小程序端\nchameleon-tool@0.3.3 开始支持 Weex 端")])]),t._v(" "),n("p",[n("code",[t._v("babelPolyfill")]),t._v(", Boolean 类型, 默认 false。\n一些 es6+的语法,babel 不会转义,例如 Object.sssign、Object.entries 等方法, 如果客户端运行环境不支持这些语法就会出错。其中 Web 使用的是 "),n("code",[t._v("@babel/polyfill")]),t._v(", 小程序端使用的是自写的一些方法的 polyfill,参见 "),n("a",{attrs:{href:"https://github.com/didi/chameleon/blob/v0.3.x-alpha/packages/chameleon-tool/configs/default/miniappPolyfill.js",target:"_blank",rel:"noopener noreferrer"}},[t._v("miniappPolyfill"),n("OutboundLink")],1),t._v(",Weex 端使用的是自写的一些方法的 polyfill,参见 "),n("a",{attrs:{href:"https://github.com/didi/chameleon/blob/v0.3.x-alpha/packages/chameleon-tool/configs/default/weexPolyfill.js",target:"_blank",rel:"noopener noreferrer"}},[t._v("weexPolyfill"),n("OutboundLink")],1),t._v("。注意添加 polyfill 后会增加一些文件体积。")]),t._v(" "),n("p",[t._v("例如:")]),t._v(" "),n("div",{staticClass:"language- extra-class"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("cml.config.merge({\n  base: {\n    dev: {\n      babelPolyfill: true\n    },\n    build: {\n      babelPolyfill: true\n    }\n  }\n})\n")])])]),n("h4",{attrs:{id:"domain-多域名请求前缀"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#domain-多域名请求前缀"}},[t._v("#")]),t._v(" Domain 多域名请求前缀")]),t._v(" "),n("blockquote",[n("p",[t._v("chameleon-tool@0.2.1\nchameleon-api@0.3.1 开始支持")])]),t._v(" "),n("p",[n("code",[t._v("domain")]),t._v(", Object 类型。\n一般配置在 base 对象中,作为所有平台的公共配置,dev 模式中配置的"),n("code",[t._v("localhost")]),t._v("会替换成当前 dev 模式启动的 web 服务 ip+端口。 具体使用文档参见 "),n("RouterLink",{attrs:{to:"/docs/build.html#api-多域名-mock"}},[t._v("API 多域名 Mock")]),t._v("")],1),t._v(" "),n("p",[t._v("例如:")]),t._v(" "),n("div",{staticClass:"language- extra-class"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v('cml.config.merge({\n  base: {\n    dev: {\n      domain: {\n        domain1: "localhost",\n        domain2: "localhost"\n      },\n    },\n    build: {\n      domain: {\n        domain1: "http://api.cml.com",\n        domain2: "http://api2.cml.com"\n      },\n    }\n  },\n})\n')])])]),n("h4",{attrs:{id:"自定义构建配置"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#自定义构建配置"}},[t._v("#")]),t._v(" 自定义构建配置")]),t._v(" "),n("p",[t._v("如果我们需要多套构建配置,可以自定义一个 media,比如设置 weex.custom 对象,然后执行"),n("code",[t._v("cml weex custom")]),t._v("即可使用你设置的 custom 配置进行构建,但是不会启动 dev 服务和 watch。\n例如:")]),t._v(" "),n("div",{staticClass:"language-javascript extra-class"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[t._v("cml"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  weex"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n    custom"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n      minimize"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//对打包结果进行压缩")]),t._v("\n      moduleIdType"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//编译的模块结果以模块名字显示")]),t._v("\n    "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("p",[t._v("自定义构建配置可配置项和上面介绍的平台内配置项是一样的,比如同样支持 publicPath apiPrefix hash minimize anslysis 等;")]),t._v(" "),n("p",[t._v("假如你在构建微信小程序端,一个构建模式下要求不压缩代码,一个构建模式下要求显示模块名字,那么可以如下配置")]),t._v(" "),n("div",{staticClass:"language-javascript extra-class"},[n("pre",{pre:!0,attrs:{class:"language-javascript"}},[n("code",[t._v("cml"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("merge")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  wx"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n    build"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n      minimize"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//对打包结果进行压缩")]),t._v("\n      moduleIdType"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'id'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//编译的模块结果以模块名字显示")]),t._v("\n    "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    custom"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n      minimize"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//对打包结果进行压缩")]),t._v("\n      moduleIdType"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//编译的模块结果以模块名字显示")]),t._v("\n    "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("p",[t._v("执行 cml wx build 则打包的代码会进行压缩以及模块名以 id 取名;\n执行 cml wx custom 则打包的代码不会压缩抑菌剂模块名以该模块对应的 name 取名")]),t._v(" "),n("h4",{attrs:{id:"组件导出配置"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#组件导出配置"}},[t._v("#")]),t._v(" 组件导出配置")]),t._v(" "),n("p",[t._v("组件导出相关的配置请参见组件导出介绍。")]),t._v(" "),n("h3",{attrs:{id:"修改-webpack-配置"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#修改-webpack-配置"}},[t._v("#")]),t._v(" 修改 webpack 配置")]),t._v(" "),n("p",[t._v(""),n("code",[t._v("chameleon.config.js")]),t._v("中可以通过 api 获取到构建之前的 webpack 配置并对其进行修改。使用方式:")]),t._v(" "),n("div",{staticClass:"language- extra-class"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("cml.utils.plugin('webpackConfig', function({ type, media, webpackConfig }, cb) {\n  // cb函数用于设置修改后的配置\n  cb({\n    type,\n    media,\n    webpackConfig\n  });\n});\n")])])]),n("h2",{attrs:{id:"平台列表"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#平台列表"}},[t._v("#")]),t._v(" 平台列表")]),t._v(" "),n("table",[n("tr",[n("th",[t._v("终端")]),t._v(" "),n("th",[t._v("关键词")]),t._v(" "),n("th",[t._v("说明")])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://doc.quickapp.cn"}},[t._v("快应用")])]),t._v(" "),n("td",[t._v("quickapp")]),t._v(" "),n("td",[n("a",{attrs:{href:"../tutorial/cml-quickapp-app.html"}},[t._v("手动扩展接入")])])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://developers.weixin.qq.com/miniprogram/dev/framework/"}},[t._v("微信小程序")])]),t._v(" "),n("td",[t._v("wx")]),t._v(" "),n("td")]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://docs.alipay.com/mini/developer/introduction"}},[t._v("支付宝小程序")])]),t._v(" "),n("td",[t._v("alipay")]),t._v(" "),n("td")]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://smartprogram.baidu.com/docs/develop/fuctionlist/list/"}},[t._v("百度小程序")])]),t._v(" "),n("td",[t._v("baidu")]),t._v(" "),n("td")]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://www.w3school.com.cn"}},[t._v("手机浏览器 / WebView")])]),t._v(" "),n("td",[t._v("web")]),t._v(" "),n("td")]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://developer.toutiao.com/docs/framework/"}},[t._v("字节跳动小程序")])]),t._v(" "),n("td",[t._v("tt")]),t._v(" "),n("td",[n("a",{attrs:{href:"../tutorial/migrate-bytedance-to-cml.html"}},[t._v("手动扩展接入")])])]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://q.qq.com/wiki/develop/miniprogram/frame/"}},[t._v("QQ 小程序")])]),t._v(" "),n("td",[t._v("qq")]),t._v(" "),n("td")]),t._v(" "),n("tr",[n("td",[n("a",{attrs:{href:"https://weex.apache.org/zh/guide/introduction.html"}},[t._v("Weex ")])]),t._v(" "),n("td",[t._v("weex")]),t._v(" "),n("td")])])])}),[],!1,null,null,null);a.default=e.exports}}]);