1 | var path = require('path')
|
2 | var fs = require('fs');
|
3 | var glob = require('glob');
|
4 | var ExtractTextPlugin = require('extract-text-webpack-plugin')
|
5 | const projectName = path.basename(path.resolve(__dirname, '../../../../'));
|
6 |
|
7 | var sep = path.sep;
|
8 |
|
9 | var aliasTypeList = ['js','css','less','svg'];
|
10 |
|
11 | var imageTypeList = ["jpg","gif","jpeg","png",'bmp','svg'];
|
12 |
|
13 | exports.assetsPath = function (_path) {
|
14 | var assetsSubDirectory = 'assets';
|
15 | return path.posix.join(assetsSubDirectory, _path);
|
16 | }
|
17 | exports.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 |
|
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 |
|
39 |
|
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 |
|
50 | return {
|
51 | css: generateLoaders(),
|
52 | postcss: generateLoaders('autoprefixer', {
|
53 | browsers: ['last 10 versions']
|
54 | }),
|
55 |
|
56 | sass: generateLoaders('sass', { indentedSyntax: true }),
|
57 | scss: generateLoaders('sass'),
|
58 | stylus: generateLoaders('stylus'),
|
59 | styl: generateLoaders('stylus')
|
60 | }
|
61 | }
|
62 |
|
63 | exports.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 |
|
74 | exports.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 | }
|
86 | exports.walk = function(path, handleFile){
|
87 | var self = this;
|
88 | self.files = fs.readdirSync(path);
|
89 | self.files.forEach(function(item) {
|
90 |
|
91 | var tmpPath = path + '/' + item;
|
92 |
|
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 |
|
105 | exports.getPath = function(url, rootPath){
|
106 |
|
107 | return path.resolve(rootPath || './', url);
|
108 | }
|
109 |
|
110 | exports.getPackageType = function(){
|
111 | return "modules";
|
112 | }
|
113 |
|
114 | exports.getOutDir = function(afterUrl){
|
115 | var dir = "./";
|
116 |
|
117 | if(afterUrl){
|
118 | dir += afterUrl;
|
119 | }
|
120 | return this.getPath(dir);
|
121 | }
|
122 | exports.fileExit = function(path) {
|
123 | try {
|
124 | var stat = fs.accessSync(path);
|
125 | return true;
|
126 | } catch (e) {
|
127 |
|
128 | }
|
129 | return false;
|
130 | }
|
131 | exports.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 |
|
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 |
|
164 | exports.resolve = function(dir){
|
165 | return path.join(__dirname, '..', dir);
|
166 | }
|
167 | exports.getVendorName = function(dir){
|
168 | return '../../www/public/lib/base';
|
169 | }
|
170 | exports.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 | }
|