jjb-cmd 1.0.17 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/bin/command-old.js +65 -0
  2. package/bin/command.js +52 -40
  3. package/package.json +6 -3
  4. package/src/new/cmd.init/index.js +48 -0
  5. package/src/{cli.init → new/cmd.init.copy/lib}/jjb.config.json +3 -8
  6. package/src/{cli.init → new/cmd.init.copy/lib}/jjb.script/build.js +0 -0
  7. package/src/new/cmd.init.copy/lib/jjb.script/config.js +149 -0
  8. package/src/{cli.init → new/cmd.init.copy/lib}/jjb.script/proxy.js +0 -0
  9. package/src/{cli.init → new/cmd.init.copy/lib}/jjb.script/server.js +0 -0
  10. package/src/{cli.init → new/cmd.init.copy/lib}/jjb.script/utils.js +0 -0
  11. package/src/{cli.init → new/cmd.init.copy/lib}/package.json +2 -2
  12. package/src/new/cmd.init.copy/lib/src/index.js +1 -0
  13. package/src/{cli.init → new/cmd.init.copy/lib}/webstorm.config.js +0 -0
  14. package/src/new/cmd.init.copy/micro-app/jjb.config.json +40 -0
  15. package/src/new/cmd.init.copy/micro-app/jjb.script/build.js +11 -0
  16. package/src/new/cmd.init.copy/micro-app/jjb.script/config.js +222 -0
  17. package/src/new/cmd.init.copy/micro-app/jjb.script/proxy.js +19 -0
  18. package/src/new/cmd.init.copy/micro-app/jjb.script/server.js +29 -0
  19. package/src/new/cmd.init.copy/micro-app/jjb.script/utils.js +13 -0
  20. package/src/new/cmd.init.copy/micro-app/package.json +65 -0
  21. package/src/new/cmd.init.copy/micro-app/public/index.html +22 -0
  22. package/src/new/cmd.init.copy/micro-app/src/enumerate/namespace/index.js +3 -0
  23. package/src/new/cmd.init.copy/micro-app/src/index.js +24 -0
  24. package/src/new/cmd.init.copy/micro-app/src/models/main/index.js +9 -0
  25. package/src/new/cmd.init.copy/micro-app/src/pages/index.js +11 -0
  26. package/src/new/cmd.init.copy/micro-app/webstorm.config.js +18 -0
  27. package/src/new/cmd.init.copy/react-component/jjb.config.json +33 -0
  28. package/src/new/cmd.init.copy/react-component/jjb.script/build.js +11 -0
  29. package/src/new/cmd.init.copy/react-component/jjb.script/config.js +159 -0
  30. package/src/new/cmd.init.copy/react-component/jjb.script/proxy.js +22 -0
  31. package/src/new/cmd.init.copy/react-component/jjb.script/server.js +29 -0
  32. package/src/new/cmd.init.copy/react-component/jjb.script/utils.js +13 -0
  33. package/src/new/cmd.init.copy/react-component/package.json +56 -0
  34. package/src/new/cmd.init.copy/react-component/src/index.js +11 -0
  35. package/src/new/cmd.init.copy/react-component/webstorm.config.js +16 -0
  36. package/src/new/cmd.install/config.js +31 -0
  37. package/src/new/cmd.install/index.js +255 -0
  38. package/src/{cli.install → new/cmd.install}/tools.js +5 -2
  39. package/src/new/cmd.push/index.js +54 -0
  40. package/src/new/cmd.reglist/index.js +22 -0
  41. package/src/new/cmd.rm-rf/index.js +58 -0
  42. package/src/new/cmd.version/index.js +34 -0
  43. package/src/{cli.dva.register.saas.txt → old/cli.dva.register.saas.txt} +0 -0
  44. package/src/{cli.dva.register.spa.txt → old/cli.dva.register.spa.txt} +0 -0
  45. package/src/{cli.dva.router.saas.txt → old/cli.dva.router.saas.txt} +0 -0
  46. package/src/{cli.dva.router.spa.txt → old/cli.dva.router.spa.txt} +0 -0
  47. package/src/old/cli.init/jjb.config.json +40 -0
  48. package/src/old/cli.init/jjb.script/build.js +11 -0
  49. package/src/{cli.init → old/cli.init}/jjb.script/config.js +12 -11
  50. package/src/old/cli.init/jjb.script/proxy.js +19 -0
  51. package/src/old/cli.init/jjb.script/server.js +29 -0
  52. package/src/old/cli.init/jjb.script/utils.js +13 -0
  53. package/src/old/cli.init/package.json +65 -0
  54. package/src/{cli.init → old/cli.init}/public/index.html +7 -1
  55. package/src/{cli.init → old/cli.init}/src/enumerate/menu/index.js +0 -0
  56. package/src/old/cli.init/src/enumerate/namespace/index.js +3 -0
  57. package/src/{cli.init → old/cli.init}/src/index.js +1 -1
  58. package/src/old/cli.init/src/models/main/index.js +31 -0
  59. package/src/old/cli.init/src/pages/index.js +9 -0
  60. package/src/old/cli.init/webstorm.config.js +18 -0
  61. package/src/{cli.init.js → old/cli.init.js} +1 -4
  62. package/src/{cli.install → old/cli.install}/config.js +12 -0
  63. package/src/{cli.install → old/cli.install}/index.js +3 -5
  64. package/src/old/cli.install/tools.js +230 -0
  65. package/src/{cli.merge.js → old/cli.merge.js} +0 -0
  66. package/src/{cli.pull.js → old/cli.pull.js} +0 -0
  67. package/src/{cli.pull2.js → old/cli.pull2.js} +4 -6
  68. package/src/{cli.rm-rf.js → old/cli.rm-rf.js} +11 -11
  69. package/src/{progress-bar.js → old/progress-bar.js} +0 -0
  70. package/src/{util.js → old/util.js} +0 -0
  71. package/src/cli.init/src/enumerate/namespace/index.js +0 -3
  72. package/src/cli.init/src/models/demo/index.js +0 -10
  73. package/src/cli.init/src/pages/index.js +0 -14
@@ -0,0 +1,222 @@
1
+ // noinspection JSUnresolvedVariable
2
+
3
+ const path = require('path');
4
+ const HtmlWebpackPlugin = require('html-webpack-plugin');
5
+ const TerserWebpackPlugin = require('terser-webpack-plugin');
6
+ const MiniCssExtractPlugin = require('mini-css-extract-plugin');
7
+ const { CleanWebpackPlugin } = require('clean-webpack-plugin');
8
+ const CssMinimizerWebpackPlugin = require('css-minimizer-webpack-plugin');
9
+ const { requireResolve } = require('./utils');
10
+ const webpack = require('webpack');
11
+
12
+ const config = require(requireResolve('jjb.config.json'));
13
+ const packageJSON = require(requireResolve('package.json'));
14
+ const server = (config.server || {});
15
+ const framework = (config.framework || {});
16
+ const environment = (config.environment || {})[ process.env.NODE_ENV ];
17
+ const windowInject = {
18
+ ...(config.windowInject || {}),
19
+ ...environment,
20
+ framework
21
+ };
22
+ const contextInject = (config.contextInject || {});
23
+ const contextData = {
24
+ ...environment,
25
+ ...contextInject
26
+ };
27
+
28
+ module.exports = mode => {
29
+ const isProduction = mode === 'production';
30
+ return {
31
+ server,
32
+ webpack: {
33
+ // 模式 ‘development’ | ‘production’
34
+ mode,
35
+ // 入口
36
+ entry: './src/index.js',
37
+ // 输出
38
+ output: {
39
+ libraryTarget: 'umd',
40
+ // 指定输出目录文件名
41
+ path: path.resolve(__dirname, '../dist'),
42
+ // 定义全局变量,暴露到‘window’对象中
43
+ library: packageJSON.name,
44
+ // 指定编译的‘js’存放目录文件名称
45
+ filename: 'static/js/[id].js',
46
+ // 输出公共路径
47
+ publicPath: '/'
48
+ },
49
+ // ‘node.module’
50
+ module: {
51
+ // 文件处理
52
+ rules: [
53
+ {
54
+ // 处理‘less’和‘css’文件
55
+ test: /\.(less|css)$/,
56
+ // 以此从下到上处理‘css’
57
+ use: [
58
+ // 3:由‘webpack.MiniCssExtractPlugin.loader’做收尾工作
59
+ // 主要分离css文件
60
+ {
61
+ loader: MiniCssExtractPlugin.loader
62
+ },
63
+ // 2:将被‘less-loader’处理的‘css’
64
+ // 由‘css-loader’再次处理
65
+ {
66
+ loader: 'css-loader'
67
+ },
68
+ // 1:处理‘less’文件
69
+ {
70
+ // 使用‘less-loader’
71
+ loader: 'less-loader',
72
+ // 配置‘less-loader’
73
+ options: {
74
+ // ‘less-loader’特殊配置
75
+ lessOptions: {
76
+ // 定义‘less’全局变量,从jjb.config.antd获取
77
+ modifyVars: (framework || {}).antd || {},
78
+ // 启用‘less-javascript’功能
79
+ javascriptEnabled: true
80
+ }
81
+ }
82
+ }
83
+ ]
84
+ },
85
+ {
86
+ // 处理‘js’文件
87
+ test: /\.js$/,
88
+ // 使用‘babel-loader’
89
+ loader: 'babel-loader',
90
+ // 允许‘babel-loader’操作目录
91
+ include: [
92
+ // 整个‘src’目录
93
+ path.resolve(__dirname, '../src'),
94
+ // ‘jjb-dva-runtime’库
95
+ path.resolve(__dirname, '../node_modules/jjb-dva-runtime'),
96
+ // ‘jjb-common-decorator’库
97
+ path.resolve(__dirname, '../node_modules/jjb-common-decorator')
98
+ ],
99
+ // 配置‘babel-loader’
100
+ options: {
101
+ // 加入一个‘babel-plugin-import’插件,特殊处理‘antd’文件过大问题
102
+ plugins: [
103
+ [
104
+ 'import',
105
+ {
106
+ // ‘webpack’定义全局变量‘antd’
107
+ libraryName: 'antd',
108
+ // 按需将‘es’文件夹中组件导出,绑定到‘antd’变量
109
+ // 除了‘es’,也可以修改为‘lib’
110
+ libraryDirectory: 'es',
111
+ // 这里设为‘true’,表示自动导入‘antd/dist/less’
112
+ // 或修改为‘css’ | ‘less’
113
+ style: true
114
+ }
115
+ ],
116
+ [
117
+ '@babel/plugin-proposal-decorators',
118
+ {
119
+ 'legacy': true
120
+ }
121
+ ]
122
+ ],
123
+ // 考虑到使用‘React JSX’语法‘babel-loader’的编译预设要改为‘preset-react’
124
+ // 可选值‘preset-env’
125
+ presets: [ '@babel/preset-react' ]
126
+ }
127
+ },
128
+ {
129
+ // 处理‘svg’文件
130
+ test: /\.svg/,
131
+ // 使用‘file-loader’
132
+ loader: 'file-loader',
133
+ // 配置‘file-loader’
134
+ options: {
135
+ // 指定存储目录
136
+ outputPath: 'media/svg'
137
+ }
138
+ },
139
+ {
140
+ // 处理图片文件
141
+ test: /\.(png|jpg|jpeg|gif|ico|bmp)/,
142
+ // 使用‘url-loader’或‘raw-loader’
143
+ loader: 'url-loader',
144
+ // 配置‘url-loader’
145
+ options: {
146
+ // 当文件大小处于(?)byte,输出‘base64’,反之为‘url’.
147
+ // 这里设为‘false’,表示无论多大多小,都为‘url’.
148
+ limit: false,
149
+ // 处理引入地址‘code’编码为‘utf-8’
150
+ encoding: true,
151
+ // 若输出为‘url’,需要指定存储目录
152
+ outputPath: 'media/image'
153
+ }
154
+ }
155
+ ]
156
+ },
157
+ // 解析
158
+ resolve: {
159
+ // 为‘import’或‘require’定义别名路径
160
+ alias: {
161
+ '~': requireResolve('src')
162
+ }
163
+ },
164
+ // 插件
165
+ plugins: [
166
+ // 定义输出‘html’模板
167
+ // 并向‘window’全局注入变量
168
+ new HtmlWebpackPlugin(Object.assign({ template: requireResolve('public/index.html') }, windowInject)),
169
+ // 对分离的‘css’区块定义同步导入名称,和异步导入名称
170
+ new MiniCssExtractPlugin({
171
+ // 同步导入‘import | require’
172
+ filename: 'static/css/[id].css',
173
+ // 异步导入‘import | require’
174
+ chunkFilename: 'static/css/[id].css'
175
+ }),
176
+ // 注入全局变量到项目中,从‘jjb.config.contextData’读取
177
+ new webpack.DefinePlugin({ 'process.env.app': JSON.stringify(contextData) }),
178
+ // 解决‘moment.js’本地化文件过多问题
179
+ // 按需加载本地化文件当前项目只需要‘zh_CN.js’
180
+ new webpack.IgnorePlugin({
181
+ contextRegExp: /moment$/,
182
+ resourceRegExp: /^\.\/locale$/
183
+ }),
184
+ // 每次打包前删除‘dist’目录
185
+ new CleanWebpackPlugin()
186
+ ],
187
+ // 外部扩展
188
+ externals: {
189
+ 'jjb-common-lib': 'jjbCommonLib'
190
+ },
191
+ // 打包优化
192
+ optimization: isProduction
193
+ ? {
194
+ // 是否启用优化
195
+ minimize: true,
196
+ // 优化插件
197
+ minimizer: [
198
+ // 压缩‘javascript’代码
199
+ new TerserWebpackPlugin({ extractComments: false }),
200
+ // 压缩‘css’代码
201
+ new CssMinimizerWebpackPlugin()
202
+ ],
203
+ // 分离‘区块’
204
+ splitChunks: {
205
+ // 分离范围‘all’即所有
206
+ chunks: 'all',
207
+ // 分离大小范围0
208
+ minSize: 0,
209
+ // 分离大小范围100000
210
+ maxSize: 100000,
211
+ // 同一个区块被调用两次,需要分离
212
+ minChunks: 2,
213
+ // 最大异步请求区块
214
+ maxAsyncRequests: 6,
215
+ // 最大初始化请求区块
216
+ maxInitialRequests: 4
217
+ }
218
+ }
219
+ : {}
220
+ }
221
+ };
222
+ };
@@ -0,0 +1,19 @@
1
+ const express = require('express');
2
+ const history = require('connect-history-api-fallback');
3
+ const app = express();
4
+ const port = '8866';
5
+
6
+ /**
7
+ * 单页面应用需要的历史记录模块
8
+ */
9
+ app.use(history());
10
+
11
+ /**
12
+ * 输出静态资源
13
+ */
14
+ app.use(express.static('../dist'));
15
+
16
+ /**
17
+ * 监听端口
18
+ */
19
+ app.listen(port, () => console.log(`Your application is running here: http://localhost:${port}`));
@@ -0,0 +1,29 @@
1
+ const Server = require('webpack-dev-server');
2
+ const webpack = require('webpack');
3
+ const { hasEnvironment } = require('./utils');
4
+
5
+ if (!hasEnvironment()) {
6
+ throw Error('jjb.script[server]: 启动server需要提供NODE_ENV变量,请确认你所运行的脚本是否正确?');
7
+ }
8
+
9
+ const config = require('./config')('development');
10
+
11
+ new Server({
12
+ host: config.server.host || '127.0.0.1',
13
+ port: config.server.port || '8080',
14
+ headers: {
15
+ 'Access-Control-Allow-Origin': '*',
16
+ 'Access-Control-Allow-Methods': '*',
17
+ 'Access-Control-Allow-Headers': '*'
18
+ },
19
+ compress: true,
20
+ client: {
21
+ overlay: {
22
+ errors: true,
23
+ warnings: true
24
+ }
25
+ },
26
+ historyApiFallback: {
27
+ disableDotRule: true
28
+ }
29
+ }, webpack(config.webpack)).startCallback(() => console.log('jjb.server 服务已启动,正在编译。'));
@@ -0,0 +1,13 @@
1
+ const path = require('path');
2
+ /**
3
+ * @description 是否有环境变量‘NODE_ENV’
4
+ * @return {boolean}
5
+ */
6
+ exports.hasEnvironment = () => process.env.NODE_ENV !== undefined;
7
+
8
+ /**
9
+ * @description 文件解析
10
+ * @param name {string}
11
+ * @return {`${string}\\${string}`}
12
+ */
13
+ exports.requireResolve = name => `${path.resolve(__dirname, '..')}\\${name}`;
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "app",
3
+ "version": "1.0.0",
4
+ "description": "jjb-base-app",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "serve": "node jjb.script/server.js",
8
+ "build": "node jjb.script/build.js",
9
+ "serve:development": "cross-env NODE_ENV=development npm run serve",
10
+ "serve:test": "cross-env NODE_ENV=test npm run serve",
11
+ "serve:release": "cross-env NODE_ENV=release npm run serve",
12
+ "serve:production": "cross-env NODE_ENV=production npm run serve",
13
+ "build:development": "cross-env NODE_ENV=development npm run build",
14
+ "build:test": "cross-env NODE_ENV=test npm run build",
15
+ "build:release": "cross-env NODE_ENV=release npm run build",
16
+ "build:production": "cross-env NODE_ENV=production npm run build",
17
+ "jjb-cmd:install": "jjb-cmd install"
18
+ },
19
+ "author": "JJB",
20
+ "license": "MIT",
21
+ "devDependencies": {
22
+ "@babel/core": "^7.19.3",
23
+ "@babel/plugin-proposal-decorators": "^7.19.3",
24
+ "@babel/preset-react": "^7.18.6",
25
+ "babel-loader": "^8.2.5",
26
+ "babel-plugin-import": "^1.13.5",
27
+ "clean-webpack-plugin": "^4.0.0",
28
+ "connect-history-api-fallback": "^2.0.0",
29
+ "cross-env": "^7.0.3",
30
+ "css-loader": "^6.7.1",
31
+ "css-minimizer-webpack-plugin": "^4.2.1",
32
+ "express": "^4.18.2",
33
+ "file-loader": "^6.2.0",
34
+ "html-webpack-plugin": "^5.5.0",
35
+ "less": "^4.1.3",
36
+ "less-loader": "^11.1.0",
37
+ "mini-css-extract-plugin": "^2.6.1",
38
+ "style-loader": "^3.3.1",
39
+ "terser-webpack-plugin": "^5.3.6",
40
+ "uglifyjs-webpack-plugin": "^2.2.0",
41
+ "url-loader": "^4.1.1",
42
+ "webpack": "^5.74.0",
43
+ "webpack-bundle-analyzer": "^4.6.1",
44
+ "webpack-cli": "^4.10.0",
45
+ "webpack-dev-server": "^4.11.1"
46
+ },
47
+ "dependencies": {
48
+ "@ant-design/icons": "^4.7.0",
49
+ "antd": "^4.23.5",
50
+ "axios": "^1.1.2",
51
+ "crypto-js": "^4.1.1",
52
+ "dva": "^2.6.0-beta.22",
53
+ "history": "^5.3.0",
54
+ "moment": "^2.29.4",
55
+ "prop-types": "^15.8.1",
56
+ "qiankun": "^2.8.3",
57
+ "react": "^17.0.2",
58
+ "react-cropper": "^2.1.8",
59
+ "react-dom": "^17.0.2",
60
+ "react-router-dom": "^5.2.0",
61
+ "watch-props": "^0.0.3",
62
+ "jjb-dva-runtime": "1.0.0",
63
+ "jjb-common-decorator": "1.0.0"
64
+ }
65
+ }
@@ -0,0 +1,22 @@
1
+ <!DOCTYPE html>
2
+ <html lang="zh">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="renderer" content="webkit">
6
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1">
7
+ <title>
8
+ <%= htmlWebpackPlugin.options.title %>
9
+ </title>
10
+ <script>
11
+ window.__JJB_ENVIRONMENT = {
12
+ API_HOST: '<%= htmlWebpackPlugin.options.API_HOST %>',
13
+ FRAMEWORK: JSON.parse('<%= JSON.stringify(htmlWebpackPlugin.options.framework.antd) %>')
14
+ };
15
+ </script>
16
+ <script src="<%= htmlWebpackPlugin.options.jjbCommonLibUrl %>"></script>
17
+ </head>
18
+ <body>
19
+ <noscript>此网页需要开启JavaScript功能。</noscript>
20
+ <div id="root" style="width: 100%; height: 100%; position: relative"></div>
21
+ </body>
22
+ </html>
@@ -0,0 +1,3 @@
1
+ import { defineNamespace } from 'jjb-dva-runtime';
2
+
3
+ export const NS_MAIN = defineNamespace('main');
@@ -0,0 +1,24 @@
1
+ import { setup } from 'jjb-dva-runtime';
2
+
3
+ const app = setup();
4
+
5
+ /**
6
+ * @description 挂载
7
+ * @param props {object}
8
+ * @returns {Promise<*>}
9
+ */
10
+ export const mount = async props => app.mount(props);
11
+
12
+ /**
13
+ * @description 卸载
14
+ * @param props {object}
15
+ * @returns {Promise<*>}
16
+ */
17
+ export const unmount = async props => app.unmount(props);
18
+
19
+ /**
20
+ * @description 启动
21
+ * @param props
22
+ * @returns {Promise<*>}
23
+ */
24
+ export const bootstrap = async props => app.bootstrap(props);
@@ -0,0 +1,9 @@
1
+ import { NS_MAIN } from '~/enumerate/namespace';
2
+ import { registerModel } from 'jjb-dva-runtime';
3
+
4
+ export default registerModel(NS_MAIN, {
5
+ state: {
6
+ loading: false
7
+ },
8
+ effects: {}
9
+ });
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+
3
+ export default class App extends React.Component {
4
+ render () {
5
+ return (
6
+ <div>
7
+ Hello World!
8
+ </div>
9
+ );
10
+ }
11
+ }
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+ const path = require('path');
3
+
4
+ function resolve (dir) {
5
+ return path.join(__dirname, '.', dir);
6
+ }
7
+
8
+ module.exports = {
9
+ context: path.resolve(__dirname, './'),
10
+ resolve: {
11
+ extensions: [ '.js' ],
12
+ alias: {
13
+ '~': resolve('src/'),
14
+ 'common': resolve('src/common'),
15
+ 'components': resolve('src/components')
16
+ }
17
+ }
18
+ };
@@ -0,0 +1,33 @@
1
+ {
2
+ "projectType": "micro-spa",
3
+ "installTarget": "node_modules",
4
+ "installResources": [],
5
+ "environment": {
6
+ "development": {
7
+ "API_HOSE": ""
8
+ },
9
+ "test": {
10
+ "API_HOSE": ""
11
+ },
12
+ "release": {
13
+ "API_HOSE": ""
14
+ },
15
+ "production": {
16
+ "API_HOSE": ""
17
+ }
18
+ },
19
+ "contextInject": {},
20
+ "windowInject": {},
21
+ "server": {
22
+ "port": "8066",
23
+ "host": "127.0.0.1"
24
+ },
25
+ "framework": {
26
+ "antd": {
27
+ "ant-prefix": "test",
28
+ "link-color": "red",
29
+ "primary-color": "red",
30
+ "border-radius-base": "2px"
31
+ }
32
+ }
33
+ }
@@ -0,0 +1,11 @@
1
+ const { hasEnvironment } = require('./utils');
2
+
3
+ if (!hasEnvironment()) {
4
+ throw Error('jjb.script[build]: 启动build需要提供NODE_ENV变量,请确认你所运行的脚本是否正确?');
5
+ }
6
+
7
+ require('webpack')(require('./config')('production').webpack).run(err => {
8
+ if (!err) {
9
+ console.log('项目打包完成!');
10
+ }
11
+ });
@@ -0,0 +1,159 @@
1
+ // noinspection JSUnresolvedVariable
2
+
3
+ const path = require('path');
4
+ const { CleanWebpackPlugin } = require('clean-webpack-plugin');
5
+ const { requireResolve } = require('./utils');
6
+ const webpack = require('webpack');
7
+
8
+ const config = require(requireResolve('jjb.config.json'));
9
+ const packageJSON = require(requireResolve('package.json'));
10
+ const server = (config.server || {});
11
+ const environment = (config.environment || {})[ process.env.NODE_ENV ];
12
+ const windowInject = (config.windowInject || {});
13
+ const contextInject = (config.contextInject || {});
14
+ const contextData = {
15
+ ...environment,
16
+ ...contextInject
17
+ };
18
+
19
+ module.exports = mode => {
20
+ const isProduction = mode === 'production';
21
+ return {
22
+ server,
23
+ webpack: {
24
+ // 模式 ‘development’ | ‘production’
25
+ mode,
26
+ // 入口
27
+ entry: './src/index.js',
28
+ // 输出
29
+ output: {
30
+ // 指定输出目录文件名
31
+ path: path.resolve(__dirname, '../dist'),
32
+ // 定义全局变量,暴露到‘window’对象中
33
+ library: packageJSON.name,
34
+ // 指定编译的‘js’存放目录文件名称
35
+ filename: 'index.js',
36
+ // 输出公共路径
37
+ publicPath: '/',
38
+ // 默认暴露‘window’此处修改为暴露到‘exports’中
39
+ libraryTarget: 'umd'
40
+ },
41
+ // ‘node.module’
42
+ module: {
43
+ // 文件处理
44
+ rules: [
45
+ {
46
+ // 处理‘less’和‘css’文件
47
+ test: /\.(less|css)$/,
48
+ // 以此从下到上处理‘css’
49
+ use: [
50
+ {
51
+ loader: 'style-loader'
52
+ },
53
+ // 2:将被‘less-loader’处理的‘css’
54
+ // 由‘css-loader’再次处理
55
+ {
56
+ loader: 'css-loader'
57
+ },
58
+ // 1:处理‘less’文件
59
+ {
60
+ // 使用‘less-loader’
61
+ loader: 'less-loader',
62
+ // 配置‘less-loader’
63
+ options: {
64
+ // ‘less-loader’特殊配置
65
+ lessOptions: {
66
+ // 定义‘less’全局变量,从jjb.config.antd获取
67
+ modifyVars: (config.framework || {}).antd || {},
68
+ // 启用‘less-javascript’功能
69
+ javascriptEnabled: true
70
+ }
71
+ }
72
+ }
73
+ ]
74
+ },
75
+ {
76
+ // 处理‘js’文件
77
+ test: /\.js$/,
78
+ // 使用‘babel-loader’
79
+ loader: 'babel-loader',
80
+ // 允许‘babel-loader’操作目录
81
+ include: [
82
+ // 整个‘src’目录
83
+ path.resolve(__dirname, '../src'),
84
+ // ‘jjb-common’库
85
+ path.resolve(__dirname, '../node_modules/jjb-common'),
86
+ // ‘jjb-react-admin-component’库
87
+ path.resolve(__dirname, '../node_modules/jjb-react-admin-component')
88
+ ],
89
+ // 配置‘babel-loader’
90
+ options: {
91
+ // 加入一个‘babel-plugin-import’插件,特殊处理‘antd’文件过大问题
92
+ plugins: [
93
+ [
94
+ 'import',
95
+ {
96
+ // ‘webpack’定义全局变量‘antd’
97
+ libraryName: 'antd',
98
+ // 按需将‘es’文件夹中组件导出,绑定到‘antd’变量
99
+ // 除了‘es’,也可以修改为‘lib’
100
+ libraryDirectory: 'es'
101
+ // 这里设为‘true’,表示自动导入‘antd/dist/less’
102
+ // 或修改为‘css’ | ‘less’
103
+ // style: true
104
+ }
105
+ ],
106
+ [
107
+ '@babel/plugin-proposal-decorators',
108
+ {
109
+ 'legacy': true
110
+ }
111
+ ]
112
+ ],
113
+ // 考虑到使用‘React JSX’语法‘babel-loader’的编译预设要改为‘preset-react’
114
+ // 可选值‘preset-env’
115
+ presets: [ '@babel/preset-react' ]
116
+ }
117
+ },
118
+ {
119
+ // 处理图片文件
120
+ test: /\.(png|jpg|jpeg|gif|ico|bmp)/,
121
+ // 使用‘url-loader’或‘raw-loader’
122
+ loader: 'url-loader',
123
+ // 配置‘url-loader’
124
+ options: {
125
+ // 当文件大小处于(?)byte,输出‘base64’,反之为‘url’.
126
+ // 这里设为‘false’,表示无论多大多小,都为‘url’.
127
+ limit: true
128
+ }
129
+ }
130
+ ]
131
+ },
132
+ // 解析
133
+ resolve: {
134
+ // 为‘import’或‘require’定义别名路径
135
+ alias: {
136
+ '~': requireResolve('src')
137
+ }
138
+ },
139
+ externals: {
140
+ 'jjb-common-lib': 'jjbCommonLib',
141
+ 'react': 'React',
142
+ 'react-dom': 'ReactDOM',
143
+ },
144
+ // 插件
145
+ plugins: [
146
+ // 注入全局变量到项目中,从‘jjb.config.contextData’读取
147
+ new webpack.DefinePlugin({ 'process.env.app': JSON.stringify(contextData) }),
148
+ // 解决‘moment.js’本地化文件过多问题
149
+ // 按需加载本地化文件当前项目只需要‘zh_CN.js’
150
+ new webpack.IgnorePlugin({
151
+ contextRegExp: /moment$/,
152
+ resourceRegExp: /^\.\/locale$/
153
+ }),
154
+ // 每次打包前删除‘dist’目录
155
+ new CleanWebpackPlugin()
156
+ ]
157
+ }
158
+ };
159
+ };
@@ -0,0 +1,22 @@
1
+ const express = require('express');
2
+ const history = require('connect-history-api-fallback');
3
+ const cors = require('cors');
4
+ const app = express();
5
+ const port = '8566';
6
+
7
+ app.use(cors('*'));
8
+
9
+ /**
10
+ * 单页面应用需要的历史记录模块
11
+ */
12
+ app.use(history());
13
+
14
+ /**
15
+ * 输出静态资源
16
+ */
17
+ app.use(express.static('../dist'));
18
+
19
+ /**
20
+ * 监听端口
21
+ */
22
+ app.listen(port, () => console.log(`Your application is running here: http://localhost:${port}`));