vue中utiL工具类

"use strict";
const path = require( "path");
const config = require( "../config");
// extract-text-webpack-plugin该插件的主要是为了抽离css样式,防止将样式打包在js中引起页面样式加载错乱的现象
const ExtractTextPlugin = require( "extract-text-webpack-plugin");
const packageConfig = require( "../package.json");
// 返回资源文件路径,path.posix以posix兼容的方式交互,是跨平台的,如果是path.win32的话,只能在win上
exports. assetsPath = function( _path) {
const assetsSubDirectory =
process. env.NODE_ENV === "production"
? config. build. assetsSubDirectory
: config. dev. assetsSubDirectory;

return path. posix. join(assetsSubDirectory, _path);
};
// 通过判断是否是生产环境,配置不同的样式语言的loader配置
exports. cssLoaders = function( options) {
options = options || {};

const cssLoader = {
loader: "css-loader",
options: { sourceMap: options. sourceMap }
};

const postcssLoader = {
loader: "postcss-loader",
options: { sourceMap: options. sourceMap }
};

// generate loader string to be used with extract text plugin
// 生成各种loader配置,通过传入不同的loader和option,将不同样式文件语言的loader拼好,push到loader配置中。
function generateLoaders( loader, loaderOptions) {
const loaders = options. usePostCSS
? [cssLoader, postcssLoader]
: [cssLoader];

if (loader) {
loaders. push({
loader: loader + "-loader",
options: Object. assign({}, loaderOptions, {
sourceMap: options. sourceMap
})
});
}

// extract-text-webpack-plugin有三个参数,use指需要用什么loader去编译文件;fallback指编译后用什么loader去提取文件;还有一个publicfile用来覆盖项目路径
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
// 对不同的样式语言,返回相应的loader
return {
css: generateLoaders(),
postcss: generateLoaders(),
less: generateLoaders( "less"),
sass: generateLoaders( "sass", {
indentedSyntax: true
}),
scss: generateLoaders( "sass"),
stylus: generateLoaders( "stylus"),
styl: generateLoaders( "stylus")
};
};

// 用于独立样式文件的enerate加载器(在.vue之外)
// 生成处理不同的样式文件处理规则
exports. styleLoaders = function( options) {
const output = [];
const loaders = exports. cssLoaders(options);

for ( const extension in loaders) {
const loader = loaders[extension];
output. push({
test: new RegExp( " \\ ." + extension + "$"),
use: loader
});
}

return output;
};

exports. createNotifierCallback = () => {
const notifier = require( "node-notifier");

return ( severity, errors) => {
if (severity !== "error") return;

const error = errors[ 0];
const filename = error. file && error. file. split( "!"). pop();

notifier. notify({
title: packageConfig. name,
message: severity + ": " + error. name,
subtitle: filename || "",
icon: path. join( __dirname, "logo.png")
});
};
};

猜你喜欢

转载自blog.csdn.net/qq_40190624/article/details/80175670
今日推荐