@iam-com/snack-scripts 1.0.0
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.
- package/README.md +2 -0
- package/bin/main.js +225 -0
- package/config/webpack.dev.config.js +183 -0
- package/config/webpack.entry.config.js +180 -0
- package/config/webpack.index.config.js +184 -0
- package/config/webpack.loader.config.js +125 -0
- package/config/webpack.snack.config.js +187 -0
- package/package.json +71 -0
- package/template/dev/App.tsx +164 -0
- package/template/dev/index.html +34 -0
- package/template/dev/index.scss +126 -0
- package/template/dev/index.tsx +66 -0
- package/template/entry/index.html +94 -0
- package/template/entry/index.scss +0 -0
- package/template/entry/index.tsx +69 -0
- package/template/env.d.ts +7 -0
- package/template/favicon.svg +1 -0
- package/template/logo.svg +1 -0
- package/template/minified.min.js +1 -0
- package/template/normalize.scss +411 -0
- package/template/proxy.min.js +12 -0
- package/template/snack/index.html +90 -0
- package/template/snack/index.tsx +45 -0
- package/tsconfig.json +27 -0
- package/utils/fs.js +169 -0
- package/utils/package.js +198 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
const path = require('path');
|
|
2
|
+
const fs = require('fs-extra');
|
|
3
|
+
const minimist = require('minimist');
|
|
4
|
+
const TerserPlugin = require('terser-webpack-plugin');
|
|
5
|
+
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
|
6
|
+
const CopyWebpackPlugin = require('copy-webpack-plugin');
|
|
7
|
+
const snackConfig = JSON.parse(process.env.PROJECT_SNACK_CONFIG);
|
|
8
|
+
const entryConfig = snackConfig.entry;
|
|
9
|
+
|
|
10
|
+
// 获取命令行参数
|
|
11
|
+
let argv = minimist(process.argv.slice(2), {
|
|
12
|
+
default: {
|
|
13
|
+
mode: 'development'
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
// build mode
|
|
18
|
+
const isDevelopment = argv.mode === 'development';
|
|
19
|
+
const isProduction = argv.mode ? argv.mode === 'production' : true;
|
|
20
|
+
// paths
|
|
21
|
+
const projectpath = process.env.PROJECT_PATH;
|
|
22
|
+
const packageJson = JSON.parse(process.env.PROJECT_PACKAGE_JSON);
|
|
23
|
+
const outPath = process.env.PROJECT_OUT_PATH;
|
|
24
|
+
const packageList = JSON.parse(process.env.PROJECT_PACKAGE_LIST);
|
|
25
|
+
// add entry
|
|
26
|
+
let entrys = {};
|
|
27
|
+
const plugins = [];
|
|
28
|
+
const coyps = [];
|
|
29
|
+
const templatePath = path.resolve(process.env.PROJECT_TEMPLATE_PATH, 'snack');
|
|
30
|
+
const templatePkgPath =entryConfig && entryConfig.template && entryConfig.template.index ? path.resolve(process.env.PROJECT_PATH, entryConfig.template.index) : ''
|
|
31
|
+
const hash = String(Math.random() * 1000000 | 0) + String(Math.random() * 1000000 | 0);
|
|
32
|
+
for (let i = 0, l = packageList.length; i < l; i++) {
|
|
33
|
+
const item = packageList[i];
|
|
34
|
+
const snackPath = path.resolve(outPath, item.name);
|
|
35
|
+
// const buildPath = isProduction ? `/${process.env.PROJECT_COMMON_NAME}` : '';
|
|
36
|
+
// 主模块入口
|
|
37
|
+
plugins.push(new HtmlWebpackPlugin({
|
|
38
|
+
title: item.info.name,
|
|
39
|
+
filename: path.join(snackPath, 'index.html'),
|
|
40
|
+
template: templatePkgPath || path.join(templatePath, 'index.html'),
|
|
41
|
+
hash: true,
|
|
42
|
+
inject: false,
|
|
43
|
+
jshash: hash, // js hash 参数
|
|
44
|
+
jsvers: {
|
|
45
|
+
name: item.name, // 模块名称
|
|
46
|
+
type: isProduction ? packageJson.name : '',
|
|
47
|
+
devServer: isDevelopment ? packageJson.dev && packageJson.dev.debug.join(',') : null, // 调试服务,为空则是生产模式
|
|
48
|
+
setting: false, // 是否存在设置模块
|
|
49
|
+
domain: '/snackbar',
|
|
50
|
+
loaderjs: `../${process.env.PROJECT_COMMON_NAME}/loader.js?_=${hash}`,
|
|
51
|
+
favicon: `../${process.env.PROJECT_COMMON_NAME}/favicon.svg`,
|
|
52
|
+
minifiedjs: `../${process.env.PROJECT_COMMON_NAME}/minified.min.js`,
|
|
53
|
+
proxyjs: `../${process.env.PROJECT_COMMON_NAME}/proxy.min.js`
|
|
54
|
+
}
|
|
55
|
+
}));
|
|
56
|
+
// 设置模块入口
|
|
57
|
+
plugins.push(new HtmlWebpackPlugin({
|
|
58
|
+
title: item.info.name + '(Setting)',
|
|
59
|
+
filename: path.join(snackPath, 'setting.html'),
|
|
60
|
+
template: path.join(templatePath, 'index.html'),
|
|
61
|
+
hash: true,
|
|
62
|
+
inject: false,
|
|
63
|
+
jshash: hash,
|
|
64
|
+
jsvers: {
|
|
65
|
+
name: item.name,
|
|
66
|
+
type: isProduction ? packageJson.name : '',
|
|
67
|
+
devServer: isDevelopment ? packageJson.dev && packageJson.dev.debug.join(',') : null,
|
|
68
|
+
setting: true,
|
|
69
|
+
domain: '/snackbar',
|
|
70
|
+
loaderjs: `../../${process.env.PROJECT_COMMON_NAME}/loader.js?_=${hash}`,
|
|
71
|
+
favicon: `../../${process.env.PROJECT_COMMON_NAME}/favicon.svg`,
|
|
72
|
+
minifiedjs: `../${process.env.PROJECT_COMMON_NAME}/minified.min.js`,
|
|
73
|
+
proxyjs: `../${process.env.PROJECT_COMMON_NAME}/proxy.min.js`
|
|
74
|
+
}
|
|
75
|
+
}));
|
|
76
|
+
fs.outputJson(path.join(snackPath, 'snack.json'), item.info, {spaces: 4});
|
|
77
|
+
}
|
|
78
|
+
// runtime loaderjs
|
|
79
|
+
coyps.push({
|
|
80
|
+
from: path.resolve(__dirname, '../template/favicon.svg'),
|
|
81
|
+
to: path.resolve(outPath, process.env.PROJECT_COMMON_NAME)
|
|
82
|
+
});
|
|
83
|
+
coyps.push({
|
|
84
|
+
from: path.resolve(__dirname, '../template/minified.min.js'),
|
|
85
|
+
to: path.resolve(outPath, process.env.PROJECT_COMMON_NAME)
|
|
86
|
+
});
|
|
87
|
+
coyps.push({
|
|
88
|
+
from: path.resolve(__dirname, '../template/proxy.min.js'),
|
|
89
|
+
to: path.resolve(outPath, process.env.PROJECT_COMMON_NAME)
|
|
90
|
+
});
|
|
91
|
+
// 调试模式复制lib
|
|
92
|
+
if (isDevelopment)
|
|
93
|
+
coyps.push({
|
|
94
|
+
from: path.resolve(outPath, '../lib'),
|
|
95
|
+
to: path.resolve(outPath, 'lib')
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
module.exports = {
|
|
99
|
+
cache: {
|
|
100
|
+
type: 'filesystem',
|
|
101
|
+
allowCollectingMemory: true
|
|
102
|
+
},
|
|
103
|
+
mode: isDevelopment ? 'development' : 'production',
|
|
104
|
+
target: ['web', 'es5'],
|
|
105
|
+
entry: entrys,
|
|
106
|
+
devtool: false,
|
|
107
|
+
output: {
|
|
108
|
+
filename: `[name]`,
|
|
109
|
+
path: outPath,
|
|
110
|
+
library: {
|
|
111
|
+
type: 'umd',
|
|
112
|
+
name: 'SnackPackage'
|
|
113
|
+
},
|
|
114
|
+
publicPath: '/'
|
|
115
|
+
},
|
|
116
|
+
plugins: [
|
|
117
|
+
new CopyWebpackPlugin({patterns: coyps}, {noErrorOnMissing: true}),
|
|
118
|
+
...plugins
|
|
119
|
+
],
|
|
120
|
+
// loader配置
|
|
121
|
+
module: {
|
|
122
|
+
rules: [
|
|
123
|
+
{
|
|
124
|
+
test: /\.(ts|tsx|js|jsc|cjs)?$/,
|
|
125
|
+
loader: 'swc-loader',
|
|
126
|
+
options: {
|
|
127
|
+
sync: true,
|
|
128
|
+
jsc: {
|
|
129
|
+
parser: {
|
|
130
|
+
'syntax': 'typescript',
|
|
131
|
+
'tsx': true
|
|
132
|
+
},
|
|
133
|
+
'target': 'es5',
|
|
134
|
+
'keepClassNames': true,
|
|
135
|
+
'loose': true
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
// 样式loader
|
|
140
|
+
{
|
|
141
|
+
// 匹配哪些文件
|
|
142
|
+
test: /\.(css|sass|scss)$/,
|
|
143
|
+
// 使用哪些loader进行处理
|
|
144
|
+
use: [
|
|
145
|
+
// use数组中loader执行顺序:从右到左,从下到上,依次执行(先执行css-loader)
|
|
146
|
+
// style-loader:创建style标签,将js中的样式资源插入进去,添加到head中生效
|
|
147
|
+
'style-loader',
|
|
148
|
+
// css-loader:将css文件变成commonjs模块加载到js中,里面内容是样式字符串
|
|
149
|
+
'css-loader',
|
|
150
|
+
// less-loader:将less文件编译成css文件,需要下载less-loader和less
|
|
151
|
+
'sass-loader'
|
|
152
|
+
]
|
|
153
|
+
}
|
|
154
|
+
]
|
|
155
|
+
},
|
|
156
|
+
resolve: {
|
|
157
|
+
extensions: ['.js', '.jsx', '.ts', '.tsx'],
|
|
158
|
+
alias: {
|
|
159
|
+
'src': path.join(process.env.PROJECT_PATH, 'src'),
|
|
160
|
+
'components': path.join(process.env.PROJECT_PATH, 'src/components'),
|
|
161
|
+
'package': path.join(process.env.PROJECT_PATH, 'src/package'),
|
|
162
|
+
'assets': path.join(process.env.PROJECT_PATH, 'src/assets')
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
optimization: {
|
|
166
|
+
minimize: isProduction,
|
|
167
|
+
minimizer: [
|
|
168
|
+
new TerserPlugin(
|
|
169
|
+
{
|
|
170
|
+
parallel: true,//使用多进程并发运行以提高构建速度 Boolean|Number 默认值: true
|
|
171
|
+
terserOptions: {
|
|
172
|
+
compress: {
|
|
173
|
+
drop_debugger: true,//移除自动断点功能;
|
|
174
|
+
},
|
|
175
|
+
format: {
|
|
176
|
+
comments: false,//删除注释
|
|
177
|
+
},
|
|
178
|
+
},
|
|
179
|
+
extractComments: false,//是否将注释剥离到单独的文件中
|
|
180
|
+
}
|
|
181
|
+
)
|
|
182
|
+
]
|
|
183
|
+
}
|
|
184
|
+
};
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
const path = require('path');
|
|
2
|
+
const fs = require('fs-extra');
|
|
3
|
+
const minimist = require('minimist');
|
|
4
|
+
const TerserPlugin = require('terser-webpack-plugin');
|
|
5
|
+
const {injectIndexFile, createExternals} = require('../utils/package');
|
|
6
|
+
// paths
|
|
7
|
+
const packageJson = JSON.parse(process.env.PROJECT_PACKAGE_JSON);
|
|
8
|
+
const packagePath = process.env.PROJECT_PATH;
|
|
9
|
+
// 外部设置依赖过滤
|
|
10
|
+
const externals = createExternals(packageJson, packagePath)
|
|
11
|
+
|
|
12
|
+
// 获取命令行参数
|
|
13
|
+
let argv = minimist(process.argv.slice(2), {
|
|
14
|
+
default: {
|
|
15
|
+
mode: 'development'
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
const isDevelopment = argv.mode === 'development';
|
|
19
|
+
const isProduction = argv.mode ? argv.mode === 'production' : true;
|
|
20
|
+
const outputPath = path.resolve(process.env.PROJECT_OUT_PATH, process.env.PROJECT_COMMON_NAME);
|
|
21
|
+
const templatePath = path.join(process.env.PROJECT_TEMPLATE_PATH, 'snack');
|
|
22
|
+
// 注入外部js/css
|
|
23
|
+
injectIndexFile(templatePath);
|
|
24
|
+
//
|
|
25
|
+
const info = {
|
|
26
|
+
id: process.env.PROJECT_COMMON_NAME,
|
|
27
|
+
type: process.env.PROJECT_TYPE,
|
|
28
|
+
isStatic: true // 静态资源标识
|
|
29
|
+
};
|
|
30
|
+
if (isProduction)
|
|
31
|
+
fs.outputJson(path.join(outputPath, 'snack.json'), info);
|
|
32
|
+
|
|
33
|
+
let conf = {
|
|
34
|
+
cache: {
|
|
35
|
+
type: 'filesystem',
|
|
36
|
+
allowCollectingMemory: true
|
|
37
|
+
},
|
|
38
|
+
performance: {
|
|
39
|
+
hints: false // 关闭性能提示
|
|
40
|
+
},
|
|
41
|
+
mode: isDevelopment ? 'development' : 'production',
|
|
42
|
+
target: ['web', 'es5'],
|
|
43
|
+
entry: path.join(templatePath, 'index.tsx'),
|
|
44
|
+
devtool: isDevelopment ? 'eval-cheap-module-source-map' : false,
|
|
45
|
+
output: {
|
|
46
|
+
filename: 'loader.js',
|
|
47
|
+
path: outputPath
|
|
48
|
+
},
|
|
49
|
+
// loader配置
|
|
50
|
+
module: {
|
|
51
|
+
rules: [
|
|
52
|
+
{
|
|
53
|
+
test: /\.(ts|tsx|js|jsc|cjs)?$/,
|
|
54
|
+
loader: 'swc-loader',
|
|
55
|
+
options: {
|
|
56
|
+
sync: true,
|
|
57
|
+
jsc: {
|
|
58
|
+
parser: {
|
|
59
|
+
'syntax': 'typescript',
|
|
60
|
+
'tsx': true
|
|
61
|
+
},
|
|
62
|
+
'target': 'es5',
|
|
63
|
+
'keepClassNames': true,
|
|
64
|
+
'loose': true
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
// 样式loader
|
|
69
|
+
{
|
|
70
|
+
// 匹配哪些文件
|
|
71
|
+
test: /\.(css|sass|scss)$/,
|
|
72
|
+
// 使用哪些loader进行处理
|
|
73
|
+
use: [
|
|
74
|
+
// use数组中loader执行顺序:从右到左,从下到上,依次执行(先执行css-loader)
|
|
75
|
+
// style-loader:创建style标签,将js中的样式资源插入进去,添加到head中生效
|
|
76
|
+
'style-loader',
|
|
77
|
+
// css-loader:将css文件变成commonjs模块加载到js中,里面内容是样式字符串
|
|
78
|
+
'css-loader',
|
|
79
|
+
// less-loader:将less文件编译成css文件,需要下载less-loader和less
|
|
80
|
+
'sass-loader'
|
|
81
|
+
]
|
|
82
|
+
}
|
|
83
|
+
]
|
|
84
|
+
},
|
|
85
|
+
// 过滤依赖包
|
|
86
|
+
externals: {
|
|
87
|
+
// 'react': 'react',
|
|
88
|
+
// 'react-dom': 'react-dom',
|
|
89
|
+
// 'para-lib': 'para-lib',
|
|
90
|
+
// '@iam-com/snack-core': 'snack-core',
|
|
91
|
+
// ...externals
|
|
92
|
+
},
|
|
93
|
+
resolve: {
|
|
94
|
+
extensions: ['.js', '.jsx', '.ts', '.tsx'],
|
|
95
|
+
alias: {
|
|
96
|
+
'src': path.join(process.env.PROJECT_PATH, 'src'),
|
|
97
|
+
'components': path.join(process.env.PROJECT_PATH, 'src/components'),
|
|
98
|
+
'package': path.join(process.env.PROJECT_PATH, 'src/package'),
|
|
99
|
+
'assets': path.join(process.env.PROJECT_PATH, 'src/assets')
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
optimization: {
|
|
103
|
+
minimize: isProduction,
|
|
104
|
+
minimizer: [
|
|
105
|
+
new TerserPlugin(
|
|
106
|
+
{
|
|
107
|
+
extractComments: false//不将注释提取到单独的文件中
|
|
108
|
+
}
|
|
109
|
+
)
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
// const configOverrides = path.resolve(process.env.PROJECT_PATH, 'config-overrides.js');
|
|
115
|
+
// if (fs.existsSync(configOverrides)) {
|
|
116
|
+
// try {
|
|
117
|
+
// const overrides = require(path.resolve(process.env.PROJECT_PATH, 'config-overrides.js'));
|
|
118
|
+
// conf = overrides(conf);
|
|
119
|
+
// console.log('snack config overrides');
|
|
120
|
+
// } catch (err) {
|
|
121
|
+
// console.error('SnackCLI Error:', err);
|
|
122
|
+
// }
|
|
123
|
+
// }
|
|
124
|
+
|
|
125
|
+
module.exports = conf;
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author 刘佳
|
|
3
|
+
* @date 2022/1/21 4:50 下午
|
|
4
|
+
* @description build snack module
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const path = require('path');
|
|
8
|
+
const fs = require('fs-extra');
|
|
9
|
+
const minimist = require('minimist');
|
|
10
|
+
const TerserPlugin = require('terser-webpack-plugin');
|
|
11
|
+
const {SnackPlugin} = require(path.resolve(__dirname, '../utils/package'));
|
|
12
|
+
const {VueLoaderPlugin} = require('vue-loader');
|
|
13
|
+
const {createExternals} = require("../utils/package");
|
|
14
|
+
// 获取命令行参数
|
|
15
|
+
let argv = minimist(process.argv.slice(2), {
|
|
16
|
+
default: {
|
|
17
|
+
mode: 'development'
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
// build mode
|
|
21
|
+
const isDevelopment = argv.mode === 'development';
|
|
22
|
+
const isProduction = argv.mode ? argv.mode === 'production' : true;
|
|
23
|
+
// paths
|
|
24
|
+
const packageJson = JSON.parse(process.env.PROJECT_PACKAGE_JSON);
|
|
25
|
+
const outPath = process.env.PROJECT_OUT_PATH;
|
|
26
|
+
const packageList = JSON.parse(process.env.PROJECT_PACKAGE_LIST);
|
|
27
|
+
const packagePath = process.env.PROJECT_PATH;
|
|
28
|
+
// add entry
|
|
29
|
+
let entrys = {};
|
|
30
|
+
for (let i = 0, l = packageList.length; i < l; i++) {
|
|
31
|
+
const item = packageList[i];
|
|
32
|
+
// runtime entry
|
|
33
|
+
entrys[`${item.name}`] = item.runtimeEntry;
|
|
34
|
+
// all entry
|
|
35
|
+
entrys[`${item.name}/setting`] = item.entry;
|
|
36
|
+
}
|
|
37
|
+
// 外部设置依赖过滤
|
|
38
|
+
const externals = createExternals(packageJson, packagePath)
|
|
39
|
+
|
|
40
|
+
let conf = {
|
|
41
|
+
cache: {
|
|
42
|
+
type: 'filesystem',
|
|
43
|
+
allowCollectingMemory: true
|
|
44
|
+
},
|
|
45
|
+
mode: isDevelopment ? 'development' : 'production',
|
|
46
|
+
target: ['web', 'es5'],
|
|
47
|
+
entry: entrys,
|
|
48
|
+
devtool: isDevelopment ? 'eval-cheap-module-source-map' : false,
|
|
49
|
+
output: {
|
|
50
|
+
filename: `[name]/index.js`,
|
|
51
|
+
path: outPath, // 要输出多文件这里就要配置输出目录而不是当个文件
|
|
52
|
+
library: {
|
|
53
|
+
type: 'umd',
|
|
54
|
+
name: 'SnackPackage'
|
|
55
|
+
},
|
|
56
|
+
publicPath: '{__snack_static__}',
|
|
57
|
+
assetModuleFilename: `${process.env.PROJECT_COMMON_NAME}/asset/[contenthash][ext][query]`
|
|
58
|
+
},
|
|
59
|
+
plugins: [
|
|
60
|
+
new VueLoaderPlugin(),
|
|
61
|
+
new SnackPlugin()
|
|
62
|
+
],
|
|
63
|
+
// 过滤依赖包
|
|
64
|
+
externals: {
|
|
65
|
+
'react': 'react',
|
|
66
|
+
'react-dom': 'react-dom',
|
|
67
|
+
'para-lib': 'para-lib',
|
|
68
|
+
'@iam-com/lib': '@iam-com/lib',
|
|
69
|
+
'@iam-com/lib/http': '@iam-com/lib',
|
|
70
|
+
'@iam-com/lib/esso': '@iam-com/lib',
|
|
71
|
+
'@iam-com/lib/ui': '@iam-com/lib',
|
|
72
|
+
'@iam-com/lib/utils': '@iam-com/lib',
|
|
73
|
+
'@iam-com/snack-core': 'snack-core',
|
|
74
|
+
...externals
|
|
75
|
+
},
|
|
76
|
+
// loader配置
|
|
77
|
+
module: {
|
|
78
|
+
rules: [
|
|
79
|
+
{
|
|
80
|
+
test: /\.(ts|tsx|js|jsc|cjs)?$/,
|
|
81
|
+
loader: 'swc-loader',
|
|
82
|
+
options: {
|
|
83
|
+
sync: true,
|
|
84
|
+
jsc: {
|
|
85
|
+
parser: {
|
|
86
|
+
'syntax': 'typescript',
|
|
87
|
+
'tsx': true
|
|
88
|
+
},
|
|
89
|
+
'target': 'es5',
|
|
90
|
+
'keepClassNames': true,
|
|
91
|
+
'loose': true
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
test: /\.(ts|tsx|js|jsc)?$/, // 或其他你想要Babel处理的文件类型
|
|
97
|
+
include: [path.resolve(__dirname, 'src')], // 指定需要Babel处理的目录
|
|
98
|
+
use: [
|
|
99
|
+
{
|
|
100
|
+
loader: 'babel-loader',
|
|
101
|
+
options: {
|
|
102
|
+
presets: [
|
|
103
|
+
['@babel/preset-env'],
|
|
104
|
+
['@babel/preset-react'],
|
|
105
|
+
['@babel/preset-typescript']
|
|
106
|
+
], // 添加对 TypeScript 的支持
|
|
107
|
+
plugins: [
|
|
108
|
+
[
|
|
109
|
+
'import',
|
|
110
|
+
{
|
|
111
|
+
libraryName: '@iam-com/ui-core',
|
|
112
|
+
libraryDirectory: '.', // 或者是根目录 '.',根据你的库结构调整
|
|
113
|
+
},
|
|
114
|
+
'ParaUI', // 可选命名空间
|
|
115
|
+
],
|
|
116
|
+
],
|
|
117
|
+
},
|
|
118
|
+
}
|
|
119
|
+
]
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
test: /\.vue$/,
|
|
123
|
+
exclude: /node_modules/,
|
|
124
|
+
use: 'vue-loader'
|
|
125
|
+
},
|
|
126
|
+
// 样式loader
|
|
127
|
+
{
|
|
128
|
+
test: /\.(css|sass|scss)$/,
|
|
129
|
+
// 使用哪些loader进行处理
|
|
130
|
+
use: [
|
|
131
|
+
// use数组中loader执行顺序:从右到左,从下到上,依次执行(先执行css-loader)
|
|
132
|
+
// style-loader:创建style标签,将js中的样式资源插入进去,添加到head中生效
|
|
133
|
+
'style-loader',
|
|
134
|
+
// css-loader:将css文件变成commonjs模块加载到js中,里面内容是样式字符串
|
|
135
|
+
'css-loader',
|
|
136
|
+
// less-loader:将less文件编译成css文件,需要下载less-loader和less
|
|
137
|
+
'sass-loader'
|
|
138
|
+
]
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
exclude: [/\.(js|mjs|jsx|ts|tsx|vue|sass|scss|css|vue|html|json|cjs)$/],
|
|
142
|
+
type: 'asset/resource'
|
|
143
|
+
}
|
|
144
|
+
]
|
|
145
|
+
},
|
|
146
|
+
resolve: {
|
|
147
|
+
extensions: ['.js', '.jsx', '.ts', '.tsx'],
|
|
148
|
+
alias: {
|
|
149
|
+
'src': path.join(process.env.PROJECT_PATH, 'src'),
|
|
150
|
+
'components': path.join(process.env.PROJECT_PATH, 'src/components'),
|
|
151
|
+
'package': path.join(process.env.PROJECT_PATH, 'src/package'),
|
|
152
|
+
'assets': path.join(process.env.PROJECT_PATH, 'src/assets')
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
optimization: {
|
|
156
|
+
minimize: isProduction,
|
|
157
|
+
minimizer: [
|
|
158
|
+
new TerserPlugin(
|
|
159
|
+
{
|
|
160
|
+
parallel: true,//使用多进程并发运行以提高构建速度 Boolean|Number 默认值: true
|
|
161
|
+
terserOptions: {
|
|
162
|
+
compress: {
|
|
163
|
+
drop_debugger: true,//移除自动断点功能;
|
|
164
|
+
},
|
|
165
|
+
format: {
|
|
166
|
+
comments: false,//删除注释
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
extractComments: false,//是否将注释剥离到单独的文件中
|
|
170
|
+
}
|
|
171
|
+
)
|
|
172
|
+
]
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
const configOverrides = path.resolve(process.env.PROJECT_PATH, 'config-overrides.js');
|
|
177
|
+
if (fs.existsSync(configOverrides)) {
|
|
178
|
+
try {
|
|
179
|
+
const overrides = require(path.resolve(process.env.PROJECT_PATH, 'config-overrides.js'));
|
|
180
|
+
conf = overrides(conf);
|
|
181
|
+
console.log('snack config overrides');
|
|
182
|
+
} catch (err) {
|
|
183
|
+
console.error('SnackCLI Error:', err);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
module.exports = conf;
|
package/package.json
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@iam-com/snack-scripts",
|
|
3
|
+
"private": false,
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"description": "snack-cli package scripts Powered by FED",
|
|
6
|
+
"bin": {
|
|
7
|
+
"snack-scripts": "./bin/main.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"bin",
|
|
11
|
+
"config",
|
|
12
|
+
"utils",
|
|
13
|
+
"template",
|
|
14
|
+
"README.md",
|
|
15
|
+
"package.json",
|
|
16
|
+
"tsconfig.json"
|
|
17
|
+
],
|
|
18
|
+
"scripts": {
|
|
19
|
+
"test:start": "node bin/main.js start --project=/Users/seth/Desktop/platform-2023/form2",
|
|
20
|
+
"test:build": "node bin/main.js build --project=/Users/seth/Desktop/IAM-2024/schneider",
|
|
21
|
+
"test:entry": "node bin/main.js entry --project=/Users/seth/Desktop/IAM-2024/EIC/portal",
|
|
22
|
+
"test:dev": "node bin/main.js test --project=/Users/seth/Desktop/platform-2023/form2",
|
|
23
|
+
"test": "webpack --config=./config/webpack.snack.config.js",
|
|
24
|
+
"ver++": "node ver++.js",
|
|
25
|
+
"publish:npm": "npm publish --tag=latest",
|
|
26
|
+
"publish:npm:beta": "npm publish --tag=beta",
|
|
27
|
+
"publish:public": "npm publish --access public",
|
|
28
|
+
"view:cnpm": "cnpm view @iam-com/snack-scripts",
|
|
29
|
+
"sync:cnpm": "cnpm sync @iam-com/snack-scripts",
|
|
30
|
+
"view:npm": "npm view @iam-com/snack-scripts",
|
|
31
|
+
"reinstall": "rm -rf node_modules && cnpm i"
|
|
32
|
+
},
|
|
33
|
+
"repository": {
|
|
34
|
+
"type": "git",
|
|
35
|
+
"url": "ssh://git@gitlab.paraview.cn:2222/Frontend/snack-common/snack-scripts.git"
|
|
36
|
+
},
|
|
37
|
+
"author": "HKLMTT",
|
|
38
|
+
"license": "ParaView",
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@iam-com/snack-core": "^1.0.1",
|
|
41
|
+
"@iam-com/lib": "^1.0.0",
|
|
42
|
+
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.3",
|
|
43
|
+
"@swc/core": "^1.2.100",
|
|
44
|
+
"@types/react": "^17.0.14",
|
|
45
|
+
"@types/react-dom": "^17.0.9",
|
|
46
|
+
"copy-webpack-plugin": "^9.0.1",
|
|
47
|
+
"css-loader": "^6.2.0",
|
|
48
|
+
"fs-extra": "^8.1.0",
|
|
49
|
+
"html-webpack-plugin": "^5.3.2",
|
|
50
|
+
"sass": "^1.77.2",
|
|
51
|
+
"react": "^17.0.2",
|
|
52
|
+
"react-dom": "^17.0.2",
|
|
53
|
+
"react-refresh": "^0.11.0",
|
|
54
|
+
"regenerator-runtime": "^0.13.9",
|
|
55
|
+
"sass-loader": "^12.1.0",
|
|
56
|
+
"style-loader": "^3.2.1",
|
|
57
|
+
"swc-loader": "^0.1.15",
|
|
58
|
+
"typescript": "^4.4.2",
|
|
59
|
+
"vue-loader": "^15.9.8",
|
|
60
|
+
"vue-template-compiler": "^2.6.14",
|
|
61
|
+
"webpack": "^5.73.0",
|
|
62
|
+
"webpack-cli": "^4.10.0",
|
|
63
|
+
"webpack-dev-server": "^4.9.2",
|
|
64
|
+
"babel-loader": "^9.1.3",
|
|
65
|
+
"babel-plugin-import": "^1.13.8",
|
|
66
|
+
"@babel/core": "^7.24.7",
|
|
67
|
+
"@babel/preset-env": "^7.24.7",
|
|
68
|
+
"@babel/preset-react": "^7.24.7",
|
|
69
|
+
"@babel/preset-typescript": "^7.24.7"
|
|
70
|
+
}
|
|
71
|
+
}
|