dawn 的webpack中间件。
内建支持:
Webpack 3.x
React
开发环境
Create-react-app
式的开发体验 (使用react-dev-utils
)- 简单配置
pipe.yml
即可上手开发 - 支持React开发环境下热更新(Hot Module Reload)
- 支持远程热更新(配合
charles
用于调试日常或预发环境) - 支持
Postcss
,其配置可以内建开启或用户自定义 - 支持
antd
和antd-mobile
的按需加载及主题配置 - 开发期间
eslint
实时报错支持 - react语法错误提示
- 默认支持
typescript
- 支持代理(使用server.yml)
- 更新 your .dawn/pipe.yml:
dev:
- name: webpack-hmr
<...options> # 写配置
- 标识入口组件为可热更新: (详见 react-hot-loader)
// App.js
import React from 'react'
import { hot } from 'react-hot-loader'
const App = () => <div>Hello World!</div>
export default hot(module)(App)
- 更新依赖
$ dn update
$ dn dev
- 需要远程热更新
适合用charles
或其他第三方代理mock静态资源请求,并保持热更新功能
举例:本地启动服务为http://localhost:8080
,日常环境为http://daily.taobao.net
将http://daily.taobao.net/js/index.js
代理到 http://localhost:8080/index.js
,用于在日常环境下做实时调试。
$ dn dev -e maplocal
默认情况下,中间件会尝试在根目录写入tsconfig.json
文件,但如果根目录已存在tsconfig.json
, 会以根目录的为准;
如果有ts编译问题,且tsconfig.json
是之前自定义的,可尝试先备份该文件后删除该文件,然后执行dn d
或其他命令运行中间件,对比中间件写入的tsconfig.json
文件看是否有差异。
除了在pipe.yml
下可自定义配置外,可通过根目录webpack.config.js
来进行深度定制
举例:
// webpack.config.js
module.exports = function(webpackConf){
let cmd = process.env.DN_CMD;
webpackConf.resolve = {
alias:{
'components':path.resolve(__dirname,'src/components'),
}
};
};
在server.yml
中配置。参考webpack-dev-server的配置。
示例:
proxy:
rules:
^/api(.*): 'https://www.aliyun.com/'
- 环境变量,配置后会使用
webpack.definePlugin
设置process.env.NODE_ENV
. dn dev
时默认为development
,dn build
时默认为production
- 如果自建了一个pipe,需要显式声明
env
。
- webpack entry。支持glob匹配
示例:
entry: ./src/*.js # 将 src 下所有 .js 文件作为入口(不包括子目录中的 js)
- webpack output, 默认为根目录
./build
。
- 模板,支持glob匹配
template: ./src/assets/*.html # 将 assest 下的所有 html 作为页面模板
- 开发端口号,仅当开发时可用。
- 默认值为
8001
- 项目代码所在目录,默认为根目录
src
。 - 传参需要
string
和Array
格式。
- 是否开启sourceMap。 env为development时默认开启;为production时默认关闭。
- 是否开启压缩。env为development时默认开启;为production时默认关闭。
- babel自定义配置,需要在用户目录下手动安装。
- 大部分babel配置已经内建。
举例:
pipe.yml
:
babel: $require ./babel.json # 同目录下
babel.json
:
{
"plugins": [
["import", { "libraryName": "antd-mobile", "style": "css" }]
]
}
- 自定义插入entry的内容
inject:
- babel-polyfill
- 是否开启
cssModules
, 默认为false
- 是否对编译后资源做分析(使用webpack-visualizer-plugin), 默认为
false
- 自定义build后资源存在的目录。
folders:
js: js
css: css
font: font
img: img
- 自定义抽取公共资源部分,默认开启。
common:
disabled: true # 禁用
name: common # 公共chunk名称
- 声明排除的库文件。默认会排除
jquery
,zepto
,react
,react-dom
externals:
jquery: jQuery
- 主题配置,可适用于
antd
或antd-mobile
。 - 因为主题配置可能较多,推荐新建一个yaml文件单独保存。
举例:
pipe.yml
:
theme: $require ./theme.yml # 同目录下
theme.yml
:
---
brand-primary: '#0070cc'
brand-success: '#35b42b'
- 是否开启移动端配置,默认false.
- 开启后会加入
postcss-px-to-viewport
,postcss-aspect-ratio-mini
和postcss-write-svg
支持 - 开启后会加入
browserslist
支持 ('iOS >= 8', 'Android >= 4')。
- 开启
isMobile
后可以进一步配置。 - 参考postcss-px-to-viewport的配置。
- 参考cssnano的配置。
- 参考less-loader的配置。
- 自定义浏览器支持范围,格式为数组。
- 定义后会用于
babel-preset-env
和postcss
的autoprefixer
。
- 自定义postcss plugin,格式为数组。需要在用户目录下手动安装。
- 自定义yamlql配置,请见yamlql-loader
举例:
yamlqlOptions:
url: '/graphql'