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实例从创建到销毁 ...
随机推荐
- <!--#include file= menu.shtml --> 引用出现空白
打开footer 然后 在DW里 点--->修改--->页面属性---->标题/编码----->把包括unicode签名(bom)的勾取消 就OK了 作用:可使用 .shtml ...
- jquery--递增--年份的选择
<select id="select_year"></select> <script> $(document).ready(function() ...
- IDEA中如何配置Tomcat和项目?
IDEA是我用的挺多的一款java代码编辑工具,对于刚接触这款软件的新手来说,配置项目是很麻烦的了,更别说配置服务器Tomcat了,那么通过我的教程大家一定觉得配置IDEA项目也是很轻松的事了. ...
- 腾讯课堂1:使用Jmeter内置的录制功能进行录制
1.设置http代理服务器 打开火狐——点击选项——高级——网络——设置 设置完成点击确定 2.查看端口是否被占用的命令 netstat -ano 3.排除模式 .*\.gif .*\.css .* ...
- Laravel5.1 模型 --远层一对多关系
远层一对多我们可以通过一个例子来充分的了解它: 每一篇文章都肯定有并且只有一个发布者 发布者可以有多篇文章,这是一个一对多的关系.一个发布者可以来自于一个国家 但是一个国家可以有多个发布者,这又是一个 ...
- Java Tomcat7性能监控与优化详解
1. 目的 通过优化tomcat提高网站的并发能力. 2. 服务器资源 服务器所能提供CPU.内存.硬盘的性能对处理能力有决定性影响. 3. 优化配置 3.1. 配置tomcat管理员账户 ...
- 编写高质量代码–改善python程序的建议(五)
原文发表在我的博客主页,转载请注明出处! 建议二十三:遵循异常处理的几点基本原则 python中常用的异常处理语法是try.except.else.finally,它们可以有多种组合,语法形式如下: ...
- hdu3535(AreYouBusy)
题目链接:传送门 题目大意:有 n 组任务,m 个体力,每组任务有 k 个,分类为 f,每个任务花费 x 体力,得到 y 开心值,求最大开心值,若不能完成输出-1 分类为 0:这一组中的 k 个任务至 ...
- Linux增加swap分区的方法
在装完Linux系统之后,建立Swap分区有两种方法. 1.新建磁盘分区作为swap分区2.用文件作为swap分区 (操作更简单,我更常用) 一.新建磁盘分区作为swap分区 1. # swapoff ...
- Oracle数据库 number 长度与 Short Integer Long BigDecimal 对应关系
转自:https://blog.csdn.net/edward9145/article/details/21398657 Oracle数据库 number 长度与 Short Integer Long ...