1 | # @sweet-milktea/milktea
|
2 |
|
3 | ## 使用
|
4 |
|
5 | ## 如何使用
|
6 |
|
7 | 1. 在工程目录下创建`.sweetrc.js`或`sweet.config.mjs`文件,然后通过cli工具运行。(支持typescript,即`.sweetrc.ts`或`sweet.config.ts`文件)
|
8 |
|
9 | 2. 在node内运行函数。
|
10 |
|
11 | ```javascript
|
12 | import webpack from 'webpack';
|
13 | import {
|
14 | dll as dllConfig, // dll编译配置
|
15 | config as webpackConfig, // webpack配置
|
16 | serverRenderConfig, // webpack服务器端渲染配置
|
17 | callback, // webpack的回调函数
|
18 | callbackOnlyError // webpack的回调函数(只显示错误信息)
|
19 | } from '@sweet-milktea/milktea';
|
20 |
|
21 | // sweetConfig { SweetConfig | string | null | undefined }: webpack配置,覆盖文件,优先级最高
|
22 | // mode { string }: 开发模式 development,生产模式 production
|
23 | // webpackLog { 'progress' | 'stats' }: 日志输出类型。progress:进度条,stats:传统的输出方式。默认为progress
|
24 | // hot { boolean }: 添加webpack.HotModuleReplacementPlugin插件,开启热更新功能
|
25 | // socket { 'sockjs' | 'ws' }: socket类型。默认为`sockjs`,也可以配置为`ws`。
|
26 | const compiler = webpack(
|
27 | await webpackConfig({
|
28 | // 配置项
|
29 | sweetConfig: null,
|
30 | mode: 'development',
|
31 | webpackLog: 'progress',
|
32 | hot: true,
|
33 | socket: 'sockjs'
|
34 | })
|
35 | );
|
36 |
|
37 | compiler.run(callback);
|
38 | ```
|
39 |
|
40 | ## 配置文件`.sweetrc.js`说明
|
41 |
|
42 | ### 使用方法
|
43 |
|
44 | 根目录下创建`.sweetrc.js`文件。代码如下所示:
|
45 |
|
46 | ```javascript
|
47 | module.exports = {
|
48 | ... // 配置
|
49 | };
|
50 | ```
|
51 |
|
52 | 或
|
53 |
|
54 | ```javascript
|
55 | module.exports = function(info) {
|
56 | return {
|
57 | ... // 配置
|
58 | };
|
59 | };
|
60 | ```
|
61 |
|
62 | ### 配置项
|
63 |
|
64 | * mode `{ string }` : 开发模式还是生产模式
|
65 | * dll `{ Array<string> }` : 配置需要编译的dll模块
|
66 | * entry `{ any }` : 文件入口(参考webpack)
|
67 | * output `{ any }` : 文件出口(参考webpack)
|
68 | * alias `{ object }` : 模块别名(参考webpack)
|
69 | * externals `{ object }` : 外部扩展(参考webpack)
|
70 | * resolve `{ object }` : 解析(参考webpack)
|
71 | * devtool `{ string }`: 设置SourceMap的类型
|
72 | * rules `{ Array<object> }` : 自定义规则
|
73 | * noParse `RegExp | Array<RegExp> | Function` : 防止解析任何与给定正则表达式相匹配的文件(参考webpack)
|
74 | * plugins `{ Array<any> }` : 自定义webpack插件
|
75 | * javascript(js) `{ object }` : javascript配置
|
76 | * targets `{ object }` : 配置@babel/preset-env的编译目标
|
77 | * ecmascript `{ boolean }` : 是否编译到ecmascript的最新语法(即不使用@babel/preset-env,通常适用于node、nwjs和electron)
|
78 | * polyfill `{ boolean }` : 使用babel-plugin-polyfill-{name}相关插件
|
79 | * typescript `{ boolean }` : 是否使用typescript编译(即使用@babel/preset-typescript)
|
80 | * presets `{ Array<any> }` : 自定义presets
|
81 | * plugins `{ Array<any> }` : 自定义plugins
|
82 | * exclude `{ RegExp }` : exclude规则
|
83 | * include `{ RegExp }` : include规则
|
84 | * typescript(ts) `{ object }` : typescript配置
|
85 | * configFile `{ string }` : typescript的配置文件
|
86 | * presets `{ Array<any> }` : 自定义babel的presets
|
87 | * plugins `{ Array<any> }` : 自定义babel的plugins
|
88 | * exclude `{ RegExp }` : exclude规则
|
89 | * include `{ RegExp }` : include规则
|
90 | * forkTsCheckerWebpackPlugin `{ boolean }` : 设置为false时,关闭fork-ts-checker-webpack-plugin插件注入
|
91 | * sass `{ object }` : sass配置
|
92 | * modules `{ boolean }` : 开启css-in-modules
|
93 | * exclude `{ RegExp }` : exclude规则
|
94 | * include `{ RegExp }` : include规则
|
95 | * additionalData `{ string | Function }` : 注入sass变量(参考sass-loader)
|
96 | * css `{ object }` : css配置(默认使用less)
|
97 | * modules `{ boolean }` : 开启css-in-modules
|
98 | * exclude `{ RegExp }` : exclude规则
|
99 | * include `{ RegExp }` : include规则
|
100 | * modifyVars `{ object }` : 注入less变量(参考less-loader)
|
101 | * additionalData `{ string | Function }` : (参考less-loader)
|
102 | * html `{ Array<object> }` : html配置(默认使用pug)
|
103 | * template `{ string }` : html模板文件地址
|
104 | * 其他`html-webpack-plugin`的配置
|
105 | * frame `{ string }` : 值为`react`或`vue`,是否为react或vue模式,并自动注入loaders和plugins
|
106 | * chainWebpack `{ Function }` : 通过`webpack-chain`的API扩展或修改webpack配置
|
107 | * filesMap `{ boolean | object }` : 输出`filesMap.json`文件,记录了文件的映射
|
108 | * hot `{ boolean }` : 添加**webpack.HotModuleReplacementPlugin**插件,开启热更新功能
|
109 |
|
110 | 下面的配置是关于服务器端渲染的
|
111 |
|
112 | * serverRender `{ boolean }` : 是否开启服务器端渲染
|
113 | * severEntry `{ any }` : 服务器端的文件入口(参考webpack)
|
114 | * serverOutput `{ any }` : 服务器端文件出口(参考webpack)
|
115 | * serverExternals `{ object }` : 服务器端的外部扩展(参考webpack)
|
116 | * serverDevtool `{ string }` : 服务器端的SourceMap的类型(参考webpack)
|
117 | * serverChainWebpack`{ Function }` : 通过`webpack-chain`的API扩展或修改SSR的webpack配置
|
118 |
|
119 | ### 关于vue
|
120 |
|
121 | 如果使用vue,需要手动安装`@vue/babel-plugin-jsx`(vue3)、`vue-loader`、`vue-svg-loader@0.17.0-beta.1`、`@vue/compiler-sfc`(vue3)。
|
122 |
|
123 | ### 关于typescript
|
124 |
|
125 | 使用typescript,需要手动安装`typescript`和`ts-loader`。
|
126 | 如果`js.typescript`为`true`,则不会配置ts-loader,且ts配置无效。因为这时typescript编译使用的是babel。
|
127 |
|
128 | ### info
|
129 |
|
130 | info是当前环境的信息。
|
131 |
|
132 | * info.environment:当前环境,可能的值为`dll`、`client`、`server`。分别为编译dll文件、编译浏览器端代码、编译node端代码。
|
133 |
|
134 | ## javascript
|
135 |
|
136 | 以`.ignore.js`结尾的文件不会被babel编译。
|
137 | 这是由于`new Worker(new URL('./worker.js', import.meta.url))`语法会被babel编译,导致webpack无法解析文件入口,所以添加了忽略的文件类型。
|
138 |
|
139 | ## 引入svg
|
140 |
|
141 | 在react或vue项目中,如果svg文件匹配`*.component.svg`,则文件作为组件引入,否则作为图片地址引入。
|
142 |
|
143 | ```javascript
|
144 | import svgUrl from './image.svg';
|
145 | import SvgComponent from './image.component.svg';
|
146 | // svgUrl:svg的图片地址
|
147 | // SvgComponent:svg作为vue组件
|
148 | export default function(props) {
|
149 | return [
|
150 | <img key="0" src={ svgUrl } />,
|
151 | <SvgComponent key="1" />
|
152 | ];
|
153 | }
|
154 | ```
|
155 |
|
156 | ## [api、服务器端渲染](https://github.com/duan602728596/sweet/blob/master/packages/server/README.md)
|
157 |
|
158 | ## 环境变量
|
159 |
|
160 | 内置了环境变量,根据环境变量判断不同的编译环境。
|
161 |
|
162 | * `process.env.SWEET_SERVER_RENDER`:判断当前环境是否为服务器端渲染。
|
163 |
|
164 | ## 使用typescript
|
165 |
|
166 | 在项目内添加`tsconfig.json`文件。 |
\ | No newline at end of file |