@molejs/mole-tools
Version:
Configuration and scripts for Mole App.
182 lines (169 loc) • 5.28 kB
JavaScript
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;
}