vue-cli的utils.js文件详解
转载自:http://www.cnblogs.com/ye-hcj/p/7078047.html
utils.js文件
// 引入nodejs路径模块
var path = require('path')
// 引入config目录下的index.js配置文件
var config = require('../config')
// 引入extract-text-webpack-plugin插件,用来将css提取到单独的css文件中
// 详情请看(1)
var ExtractTextPlugin = require('extract-text-webpack-plugin')
// exports其实就是一个对象,用来导出方法的,最终还是使用module.exports,此处导出assetsPath
exports.assetsPath = function (_path) {
// 如果是生产环境assetsSubDirectory就是'static',否则还是'static',哈哈哈
var assetsSubDirectory = process.env.NODE_ENV === 'production'
? config.build.assetsSubDirectory
: config.dev.assetsSubDirectory
// path.join和path.posix.join的区别就是,前者返回的是完整的路径,后者返回的是完整路径的相对根路径
// 也就是说path.join的路径是C:a/a/b/xiangmu/b,那么path.posix.join就是b
return path.posix.join(assetsSubDirectory, _path)
// 所以这个方法的作用就是返回一个干净的相对根路径
}
// 下面是导出cssLoaders的相关配置
exports.cssLoaders = function (options) {
// options如果不为null或者undefined,0,""等等就原样,否则就是{}。在js里面,||运算符,A||B,A如果为真,直接返回A。如果为假,直接返回B(不会判断B是什么类型)
options = options || {} var cssLoader = {
// cssLoader的基本配置
loader: 'css-loader',
options: {
// options是用来传递参数给loader的
// minimize表示压缩,如果是生产环境就压缩css代码
minimize: process.env.NODE_ENV === 'production',
// 是否开启cssmap,默认是false
sourceMap: options.sourceMap
}
} // generate loader string to be used with extract text plugin
function generateLoaders (loader, loaderOptions) {
// 将上面的基础cssLoader配置放在一个数组里面
var loaders = [cssLoader]
// 如果该函数传递了单独的loader就加到这个loaders数组里面,这个loader可能是less,sass之类的
if (loader) {
// 加载对应的loader
loaders.push({
loader: loader + '-loader',
// Object.assign是es6的方法,主要用来合并对象的,浅拷贝
options: Object.assign({}, loaderOptions, {
sourceMap: options.sourceMap
})
})
} // Extract CSS when that option is specified
// (which is the case during production build)
if (options.extract) {
// 注意这个extract是自定义的属性,可以定义在options里面,主要作用就是当配置为true就把文件单独提取,false表示不单独提取,这个可以在使用的时候单独配置,瞬间觉得vue作者好牛逼
return ExtractTextPlugin.extract({
use: loaders,
fallback: 'vue-style-loader'
})
} else {
return ['vue-style-loader'].concat(loaders)
}
// 上面这段代码就是用来返回最终读取和导入loader,来处理对应类型的文件
} // https://vue-loader.vuejs.org/en/configurations/extract-css.html
return {
css: generateLoaders(), // css对应 vue-style-loader 和 css-loader
postcss: generateLoaders(), // postcss对应 vue-style-loader 和 css-loader
less: generateLoaders('less'),// less对应 vue-style-loader 和 less-loader
sass: generateLoaders('sass', { indentedSyntax: true }),// sass对应 vue-style-loader 和 sass-loader
scss: generateLoaders('sass'), // scss对应 vue-style-loader 和 sass-loader
stylus: generateLoaders('stylus'),// stylus对应 vue-style-loader 和 stylus-loader
styl: generateLoaders('stylus') // styl对应 vue-style-loader 和 styl-loader
}
} // Generate loaders for standalone style files (outside of .vue)
// 下面这个主要处理import这种方式导入的文件类型的打包,上面的exports.cssLoaders是为这一步服务的
exports.styleLoaders = function (options) {
var output = []
// 下面就是生成的各种css文件的loader对象
var loaders = exports.cssLoaders(options)
// 把每一种文件的laoder都提取出来
for (var extension in loaders) {
var loader = loaders[extension]
output.push({
// 把最终的结果都push到output数组中,大事搞定
test: new RegExp('\\.' + extension + '$'),
use: loader
})
}
return output
}
注释
(1)extract-text-webpack-plugin插件是用来将文本从bundle中提取到一个单独的文件中
基本使用方法如下
const ExtractTextPlugin = require("extract-text-webpack-plugin");
module.exports = {
module: {
rules: [
{
test: /\.css$/, //主要用来处理css文件
use: ExtractTextPlugin.extract({
fallback: "style-loader", // fallback表示如果css文件没有成功导入就使用style-loader导入
use: "css-loader" // 表示使用css-loader从js读取css文件
})
}
],
plugins: [
new ExtractTextPlugin("styles.css") //表示生成styles.css文件
]
}
}
注释utils.js的exports.styleLoaders主要返回了啥
var output=[
{
test: new RegExp('\\.css$'),
use: ExtractTextPlugin.extract({
use: [{
loader: 'css-loader',
options: {
sourceMap: true,
extract: true
}
}],
fallback: 'vue-style-loader'
})
},
{
test: new RegExp('\\.postcss$'),
use: ExtractTextPlugin.extract({
use: [{
loader: 'css-loader',
options: {
sourceMap: true,
extract: true
}
}],
fallback: 'vue-style-loader'
})
},
{
test: new RegExp('\\.less$'),
use: ExtractTextPlugin.extract({
use: [
{
loader: 'css-loader',
options: {
sourceMap: true,
extract: true
}
},
{
loader: 'less-loader',
options: {
sourceMap: true,
extract: true
}
}
],
fallback: 'vue-style-loader'
})
},
{
test: new RegExp('\\.sass$'),
use: ExtractTextPlugin.extract({
use: [
{
loader: 'css-loader',
options: {
sourceMap: true,
extract: true
}
},
{
loader: 'sass-loader',
options: {
sourceMap: true,
extract: true,
indentedSyntax: true
}
}
],
fallback: 'vue-style-loader'
})
},
//剩下的略
]
注释utils.js的exports.cssLoaders主要返回了啥
{
css: ExtractTextPlugin.extract({
use: [{
loader: 'css-loader',
options: {
sourceMap: true,
extract: true
}
}],
fallback: 'vue-style-loader'
}),
postcss: ExtractTextPlugin.extract({
use: [{
loader: 'css-loader',
options: {
sourceMap: true,
extract: true
}
}],
fallback: 'vue-style-loader'
}),
less: ExtractTextPlugin.extract({
use: [
{
loader: 'css-loader',
options: {
sourceMap: true,
extract: true
}
},
{
loader: 'less-loader',
options: {
sourceMap: true,
extract: true
}
}
],
fallback: 'vue-style-loader'
}),
sass: ExtractTextPlugin.extract({
use: [
{
loader: 'css-loader',
options: {
sourceMap: true,
extract: true
}
},
{
loader: 'sass-loader',
options: {
sourceMap: true,
extract: true,
indentedSyntax: true
}
}
],
fallback: 'vue-style-loader'
}),
//剩下的略
}
注释:这是vue-loader配置的一个实例,用到utils.js的
exports.cssLoaders的返回值很合适。
vue-loader官网:https://vue-loader.vuejs.org/zh-cn/
具体配置官网:https://vue-loader.vuejs.org/zh-cn/configurations/extract-css.html
//Webpack 2.x
// webpack.config.js
var ExtractTextPlugin = require("extract-text-webpack-plugin") module.exports = {
// other options...
module: {
rules: [
{
test: /\.vue$/,
loader: 'vue-loader',
options: {
loaders: {
css: ExtractTextPlugin.extract({
use: 'css-loader',
fallback: 'vue-style-loader' // <- 这是vue-loader的依赖,所以如果使用npm3,则不需要显式安装
})
}
}
}
]
},
plugins: [
new ExtractTextPlugin("style.css")
]
}
结束
vue-cli的utils.js文件详解的更多相关文章
- Vue中ESlint配置文件eslintrc.js文件详解
最近在跟着视频敲项目时,代码提示出现很多奇奇怪怪的错误提示,百度了一下是eslintrc.js文件没有配置相关命令,ESlint的语法检测真的令人抓狂,现在总结一下这些命令的解释,方便以后查阅. 默认 ...
- vue-cli中config目录下的index.js文件详解
vue-cli脚手架工具config目录下的index.js解析 转载自:http://www.cnblogs.com/ye-hcj/p/7077796.html // see http://vuej ...
- 关于mongorc.js文件详解
最近阅读了<<mongodb权威指南第二版>>,发现这本书比之前的第一版好,很多地方讲解很详细.下面就翻译下谈下这个文件. 首先,启动shell的时候,mongorc.js文件 ...
- protobuf 编译 java js文件详解
首先下载protobuf.exe 下载地址:https://download.csdn.net/download/qq_34756156/10220137 MessageBody.proto synt ...
- Vue.js项目详解
还是以Blog项目来讲解,最近我本人利用闲暇时间,以博客作为参考学习一些新的技术并尝试之前没有尝试过的思路来玩玩. 技术看似枯燥,但是带有一个目的来学,你会发现还是蛮有趣的. 主要实践的就是前后端分离 ...
- vue-cli生成的模板各个文件详解(转)
vue-cli脚手架中webpack配置基础文件详解 一.前言 原文:https://segmentfault.com/a/1190000014804826 vue-cli是构建vue单页应用的脚手架 ...
- Angular Npm Package.Json文件详解
Angular7 Npm Package.Json文件详解 近期时间比较充裕,正好想了解下Angular Project相关内容.于是将Npm官网上关于Package.json的官方说明文档进行了 ...
- Vue在单独引入js文件中使用ElementUI的组件
Vue在单独引入js文件中使用ElementUI的组件 问题场景: 我想在vue中的js文件中使用elementUI中的组件,因为我在main.js中引入了element包和它的css,并挂载到了全局 ...
- Vue钩子函数生命周期实例详解
vue生命周期简介 Vue实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom.渲染→更新→渲染.卸载等一系列过程,我们称这是Vue的生命周期.通俗说就是Vue实例从创建到销毁 ...
随机推荐
- Flask 安装 快速入门
$ pip install flask Flask自带的Server在端口5000上监听: ython app.py flask通过request.form['name']来获取表单的内容. 外部可见 ...
- 一个共通的viewModel搞定所有的分页查询一览及数据导出(easyui + knockoutjs + mvc4.0)
前言 大家看标题就明白了我想写什么了,在做企业信息化系统中可能大家写的最多的一种页面就是查询页面了.其实每个查询页面,除了条件不太一样,数据不太一样,其它的其实都差不多.所以我就想提取一些共通的东西出 ...
- Flash AS 2.0右键菜单问题
这几天都在忙这个右键菜单,因为之前的右键菜单都不能用了,必须做新的. 可是又必须使用原来2.0的接口和方法,真是忙的焦头烂额. 之前2.0的东西太多又太杂. 我头一个右键菜单和二级菜单没有问题了,做第 ...
- 用n(0)次求一个数组里面最大子数组的和(数组可以输入负数)
今天老师布置了题目上的任务,可谓是杀死人脑细胞不偿命呐... 在课上叽叽咕咕的讨论了一节课也没有答案,只得出几个备选方案,一个是通过枚举法将数组里面的子数组和一个个列出来然后在进行比较,可想而知(n2 ...
- 图像jpeg压缩
图像分割 8X8 颜色空间转换RGB->YCbCr 3个8X8的矩阵 离散余弦变换:(Discrete cosine transform),简称DCT. DCT转换后的数组中第一个是一个直线数据 ...
- Ruby on Rails 初次冲浪体验
为了更好的阅读体验,欢迎訪问 作者博客原文 Rails is a web application development framework written in the Ruby language. ...
- HDU3308(LCIS) 线段树好题
题目链接:传送门 题目大意:给你n个数,m个操作.操作有两种:1.U x y 将数组第x位变为y 2. Q x y 问数组第x位到第y位连续最长子序列的长度.对于每次询问,输出一个答案 题目思路: ...
- 如何转义CSV文件中的逗号
CSV全称是:Comma Separated Values 或者 Character Separated Values. 尽管第一种说法更常见,但我觉得还是第二种说法更确切一些,因为你可以使用其它字符 ...
- 移动端:判断是否微信端、判断手机操作系统(ios或android)
http://caibaojian.com/browser-ios-or-android.htmlfunction is_weixin() { var ua = window.navigator.us ...
- bootstrap3.3.6 CDN
<!-- Latest compiled and minified CSS --> <link rel="stylesheet" href="//max ...