UNPKG

5.28 kBJavaScriptView Raw
1var path = require('path')
2var fs = require('fs');
3var glob = require('glob');
4var ExtractTextPlugin = require('extract-text-webpack-plugin')
5const projectName = path.basename(path.resolve(__dirname, '../../../../'));
6
7var sep = path.sep;
8//根据fileType获取文件别名列表和不带后缀的文件名列表
9var aliasTypeList = ['js','css','less','svg'];
10//图片类型文件
11var imageTypeList = ["jpg","gif","jpeg","png",'bmp','svg'];
12
13exports.assetsPath = function (_path) {
14 var assetsSubDirectory = 'assets';
15 return path.posix.join(assetsSubDirectory, _path);
16}
17exports.cssLoaders = function (options) {
18 options = options || {}
19 var cssLoader = {
20 loader: 'css-loader',
21 options: {
22 minimize: process.env.NODE_ENV === 'production',
23 sourceMap: options.sourceMap
24 }
25 }
26 // generate loader string to be used with extract text plugin
27 function generateLoaders (loader, loaderOptions) {
28 var loaders = [cssLoader]
29 if (loader) {
30 loaders.push({
31 loader: loader + '-loader',
32 options: Object.assign({}, loaderOptions, {
33 sourceMap: options.sourceMap
34 })
35 })
36 }
37
38 // Extract CSS when that option is specified
39 // (which is the case during production build)
40 if (options.extract) {
41 return ExtractTextPlugin.extract({
42 use: loaders,
43 fallback: 'vue-style-loader'
44 })
45 } else {
46 return ['vue-style-loader'].concat(loaders)
47 }
48 }
49 // https://vue-loader.vuejs.org/en/configurations/extract-css.html
50 return {
51 css: generateLoaders(),
52 postcss: generateLoaders('autoprefixer', {
53 browsers: ['last 10 versions']
54 }),
55 //less: generateLoaders('less?'+JSON.stringify(lessConfig)),
56 sass: generateLoaders('sass', { indentedSyntax: true }),
57 scss: generateLoaders('sass'),
58 stylus: generateLoaders('stylus'),
59 styl: generateLoaders('stylus')
60 }
61}
62//获取多级的入口文件
63exports.getMultiEntry = function (globPath) {
64 var entries = {},
65 basename, tmp, pathname;
66 glob.sync(globPath).forEach(function (entry) {
67 basename = path.basename(entry, path.extname(entry));
68 tmp = entry.replace('./src/modules', 'modules').replace('.html', '');
69 entries[tmp] = entry;
70 });
71 return entries;
72}
73// Generate loaders for standalone style files (outside of .vue)
74exports.styleLoaders = function (options) {
75 var output = []
76 var loaders = exports.cssLoaders(options)
77 for (var extension in loaders) {
78 var loader = loaders[extension]
79 output.push({
80 test: new RegExp('\\.' + extension + '$'),
81 use: loader
82 })
83 }
84 return output
85}
86exports.walk = function(path, handleFile){
87 var self = this;
88 self.files = fs.readdirSync(path);
89 self.files.forEach(function(item) {
90 //console.log(item);
91 var tmpPath = path + '/' + item;
92 //console.log("---"+tmpPath);
93 var stats = fs.statSync(tmpPath);
94 if (stats.isDirectory()) {
95 if(item === '.svn'){
96 return false;
97 }
98 self.walk(tmpPath,handleFile);
99 } else {
100 handleFile(tmpPath,stats);
101 }
102 });
103}
104//获取绝对路径
105exports.getPath = function(url, rootPath){
106 //console.log('--'+ rootPath)
107 return path.resolve(rootPath || './', url);
108}
109//获取打包类型
110exports.getPackageType = function(){
111 return "modules";
112}
113//获取输入目录
114exports.getOutDir = function(afterUrl){
115 var dir = "./";
116
117 if(afterUrl){
118 dir += afterUrl;
119 }
120 return this.getPath(dir);
121}
122exports.fileExit = function(path) {
123 try {
124 var stat = fs.accessSync(path);
125 return true;
126 } catch (e) {
127
128 }
129 return false;
130}
131exports.getFileList = function(pathDir, params){
132 var customPath = path.resolve(params.root, './src/app.js');
133
134 // 判断是否存在扩展文件
135 var customFlag = this.fileExit(customPath);
136
137 var entryAliasList = {}; // 入口程序别名
138 var splitStr = projectName + sep + 'src';
139
140 this.walk(pathDir, function(tmpPath){
141
142 var fileType = tmpPath.split('.').pop().toLowerCase();
143 if(aliasTypeList.indexOf(fileType) === -1 && imageTypeList.indexOf(fileType) === -1){
144 return false;
145 }
146 var fileName = tmpPath.split(sep).pop().replace(/\.\w+$/,'');
147 //
148 var folderPath = tmpPath.split(splitStr)[1];
149 var entryName = fileName;
150
151 if (folderPath) {
152 entryName = folderPath.replace(/\.\w+$/,'').slice();
153 }
154 //入口程序js
155 if(fileType === 'js' && fileName.indexOf('.page') > -1){
156 entryAliasList['../../www/' + entryName] = customFlag ? [customPath, './src'+ entryName + '.js'] : customPath;
157 }
158 });
159 return {
160 entryAliasList:entryAliasList
161 };
162}
163
164exports.resolve = function(dir){
165 return path.join(__dirname, '..', dir);
166}
167exports.getVendorName = function(dir){
168 return '../../www/public/lib/base';
169}
170exports.getEntryAliasList = function(params){
171
172 //所有需要打包的目录下文件列表
173 var packageType = this.getPackageType();
174 //生成入口文件
175 var pageFileList = this.getFileList(this.getPath('src/'+packageType, params.root), params);
176 var entry = pageFileList.entryAliasList;
177 var vendorKey = this.getVendorName();
178 //入口文件配置
179 entry[vendorKey] = ['upaas-ui/dist/upaas-ui.css', '@beisen/bsapp-resetcss/reset.less', './src/shared/style/index.less'];
180 return entry;
181}