UNPKG

4.92 kBMarkdownView Raw
1# marax
2
3[![npm](https://img.shields.io/npm/v/@mara/x.svg)](https://www.npmjs.com/package/@mara/x)
4
5支持 React / Vue + Ts 的多页应用打包工具。
6
7**灵感**
8站在巨人的肩膀上。`marax` 受众多开源项目启发,持续跟进并融合了 [create-react-app](https://github.com/facebook/create-react-app) 及 [vue-cli](https://github.com/vuejs/vue-cli) 的核心配置,旨在为 React/Vue/Js/Ts 等不同技术栈项目提供**一致性**的构建流程与**开箱即用**的开发体验。
9
10## 安装
11
12> 依赖 Node.js 8.10.0+
13
14推荐使用 marax 配套的项目生成工具 [@mara/create](https://www.npmjs.com/package/@mara/create) 创建项目
15
16```bash
17npx @mara/create my-app
18```
19
20### 手动安装
21
22也可以在现有项目中手动安装 @mara/x
23
24```bash
25yarn add @mara/x -D
26```
27
28### 配置 npm script
29
30`package.json` 中配置 npm-script
31
32```bash
33"scripts": {
34 "dev": "marax dev",
35 "build": "marax build"
36 },
37 ...
38```
39
40## 命令
41
42marax 提供开箱即用的多页应用打包服务,在 marax 中**页面**又称为**视图(view)**,存放于 `src/views` 目录下。
43
44我们约定,一个典型的**页面**应至少包含一个 `index.html` 文件和一个 `index.js` 文件。
45
46一个项目应至少含有一个页面。
47
48### 启动开发环境
49
50运行开发命令在本地启动一个开发服务器,默认端口号 `3022`
51
52```bash
53npm run dev [view_name]
54```
55
56当 views 下存在多个页面时,dev 命令需指定页面名(view_name),缺省情况下将进入交互模式进行选择。
57当只有一个页面时页面名可省略。
58
59示例:
60
61```bash
62# 在 index 页面下开发
63npm run dev index
64```
65
66### 打包项目
67
68打包页面,将在 `dist/<view_name>` 目录下输出构建结果
69
70```bash
71npm run build [view_name]
72```
73
74当 views 下存在多个页面时,需显式指定或交互式选择页面名。单页时页面名可省略。
75
76示例:
77
78```bash
79# 打包 index 页面
80npm run build index
81```
82
83#### FTP 上传
84
85在 build 模式下可配置使用 ftp 上传功能,需在项目根目录创建 `marauder.config.js` 文件,并注册 ftp 账号信息。
86
87通过 `--ftp` 参数指定将打包结果上传 ftp。为方便多分支测试,当传递 `branch_name` 值时,将创建 branch 文件夹作路径隔离。
88
89```bash
90npm run build [view_name] --ftp [branch_name]
91```
92
93示例:
94
95```bash
96# 打包 index 页面,并上传至测试地址
97npm run build index --ftp
98
99# 打包 index 页面,并通过上传至测试地址下的 feed_feature 文件夹中
100npm run build index --ftp feed_feature
101```
102
103#### Test 发布\*
104
105使用 Test 发布功能,需在 `marauder.config.js` 中注册 gitlab privateToken 信息。
106
107`build` 命令基础上,可通过添加 `--test` 参数发布到测试环境。
108
109```bash
110npm run build [view_name] --test [tag_message]
111```
112
113### 打包 dll 文件
114
115`marauder.config.js` 中配置 `vendor` 信息
116
117```
118vendor: ['react', 'react-router']
119```
120
121运行 `dll` 命令生成公共资源包,执行结果将会输出到 `dist/vendor` 文件夹下
122
123```bash
124npm run dll
125
126# 打包 dll 文件,并上传至文件服务器
127npm run dll --ftp
128```
129
130### 打包组件
131
132`marax` 除了支持项目打包外,也可作为组件打包工具。
133
134在工程 `src` 文件夹中创建 `index.js` 文件作为组件入口
135
136npm-script 中配置
137
138```json
139"build": "marax lib"
140```
141
142打包
143
144```bash
145npm run build
146```
147
148打包后文件将在 `lib` 目录中输出构建结果
149
150此外还可指定 `--all` 参数来打包 demo
151
152```bash
153npm run build -- --all
154```
155
156## 教程
157
158### 代码分割
159
160#### 动态代码分割
161
162使用动态 import 方法生成动态 chunk 包
163
164```javascript
165import('./my-module.js').then(module => {
166 // Do something with the module.
167})
168```
169
170这种使用方式也支持 await 关键字。
171
172```javascript
173let module = await import('/modules/my-module.js')
174```
175
176#### 静态代码分割
177
178此功能可零配置启用,凡是在 `views/<view_name>/` 下符合命名约定 `index.<chunk_name>.js` 的文件均会被视为 `chunk` 包拆分,拆分后的 bundle 文件以 `<chunk_name>.servant.js` 命名,这里称之为 `servant` 包。
179
180其中 `chunk_name` 为拆分入口的名称,例如 `index.foo.js` 构建后将生成 `foo.servant.js`
181
182`<chunk_name>.servant.js` 文件将只会在生产环境(build)生成,在开发环境(dev)中,所有的 servant 将合并到 entry 中引入。对于使用者来说一切都是无感知的。
183
184**注意**
185由于 entry bundle 中已经包含 `polyfill`(Promise,Object.assign),为了避免打包不必要冗余,通过此方式拆分出的 servant 包将不包含 polyfill 内容。为安全起见,建议将 servant 包置于 entry 之后引入(除非您清楚 servant 中不会触发兼容性问题),这也是取名为 `servant` 的本意。`webpack-marauder` 已为您默认配置好一切。
186
187#### 打包 vendor
188
189默认的,marax 会自动拆分 vendor 包。