UNPKG

@molejs/mole-tools

Version:

Configuration and scripts for Mole App.

182 lines (169 loc) 5.28 kB
var path = require('path') var fs = require('fs'); var glob = require('glob'); var ExtractTextPlugin = require('extract-text-webpack-plugin') const projectName = path.basename(path.resolve(__dirname, '../../../../')); var sep = path.sep; //根据fileType获取文件别名列表和不带后缀的文件名列表 var aliasTypeList = ['js','css','less','svg']; //图片类型文件 var imageTypeList = ["jpg","gif","jpeg","png",'bmp','svg']; exports.assetsPath = function (_path) { var assetsSubDirectory = 'assets'; return path.posix.join(assetsSubDirectory, _path); } exports.cssLoaders = function (options) { options = options || {} var cssLoader = { loader: 'css-loader', options: { minimize: process.env.NODE_ENV === 'production', sourceMap: options.sourceMap } } // generate loader string to be used with extract text plugin function generateLoaders (loader, loaderOptions) { var loaders = [cssLoader] if (loader) { loaders.push({ loader: loader + '-loader', options: Object.assign({}, loaderOptions, { sourceMap: options.sourceMap }) }) } // Extract CSS when that option is specified // (which is the case during production build) if (options.extract) { return ExtractTextPlugin.extract({ use: loaders, fallback: 'vue-style-loader' }) } else { return ['vue-style-loader'].concat(loaders) } } // https://vue-loader.vuejs.org/en/configurations/extract-css.html return { css: generateLoaders(), postcss: generateLoaders('autoprefixer', { browsers: ['last 10 versions'] }), //less: generateLoaders('less?'+JSON.stringify(lessConfig)), sass: generateLoaders('sass', { indentedSyntax: true }), scss: generateLoaders('sass'), stylus: generateLoaders('stylus'), styl: generateLoaders('stylus') } } //获取多级的入口文件 exports.getMultiEntry = function (globPath) { var entries = {}, basename, tmp, pathname; glob.sync(globPath).forEach(function (entry) { basename = path.basename(entry, path.extname(entry)); tmp = entry.replace('./src/modules', 'modules').replace('.html', ''); entries[tmp] = entry; }); return entries; } // Generate loaders for standalone style files (outside of .vue) exports.styleLoaders = function (options) { var output = [] var loaders = exports.cssLoaders(options) for (var extension in loaders) { var loader = loaders[extension] output.push({ test: new RegExp('\\.' + extension + '$'), use: loader }) } return output } exports.walk = function(path, handleFile){ var self = this; self.files = fs.readdirSync(path); self.files.forEach(function(item) { //console.log(item); var tmpPath = path + '/' + item; //console.log("---"+tmpPath); var stats = fs.statSync(tmpPath); if (stats.isDirectory()) { if(item === '.svn'){ return false; } self.walk(tmpPath,handleFile); } else { handleFile(tmpPath,stats); } }); } //获取绝对路径 exports.getPath = function(url, rootPath){ //console.log('--'+ rootPath) return path.resolve(rootPath || './', url); } //获取打包类型 exports.getPackageType = function(){ return "modules"; } //获取输入目录 exports.getOutDir = function(afterUrl){ var dir = "./"; if(afterUrl){ dir += afterUrl; } return this.getPath(dir); } exports.fileExit = function(path) { try { var stat = fs.accessSync(path); return true; } catch (e) { } return false; } exports.getFileList = function(pathDir, params){ var customPath = path.resolve(params.root, './src/app.js'); // 判断是否存在扩展文件 var customFlag = this.fileExit(customPath); var entryAliasList = {}; // 入口程序别名 var splitStr = projectName + sep + 'src'; this.walk(pathDir, function(tmpPath){ var fileType = tmpPath.split('.').pop().toLowerCase(); if(aliasTypeList.indexOf(fileType) === -1 && imageTypeList.indexOf(fileType) === -1){ return false; } var fileName = tmpPath.split(sep).pop().replace(/\.\w+$/,''); // var folderPath = tmpPath.split(splitStr)[1]; var entryName = fileName; if (folderPath) { entryName = folderPath.replace(/\.\w+$/,'').slice(); } //入口程序js if(fileType === 'js' && fileName.indexOf('.page') > -1){ entryAliasList['../../www/' + entryName] = customFlag ? [customPath, './src'+ entryName + '.js'] : customPath; } }); return { entryAliasList:entryAliasList }; } exports.resolve = function(dir){ return path.join(__dirname, '..', dir); } exports.getVendorName = function(dir){ return '../../www/public/lib/base'; } exports.getEntryAliasList = function(params){ //所有需要打包的目录下文件列表 var packageType = this.getPackageType(); //生成入口文件 var pageFileList = this.getFileList(this.getPath('src/'+packageType, params.root), params); var entry = pageFileList.entryAliasList; var vendorKey = this.getVendorName(); //入口文件配置 entry[vendorKey] = ['upaas-ui/dist/upaas-ui.css', '@beisen/bsapp-resetcss/reset.less', './src/shared/style/index.less']; return entry; }