VUE学习之路三 项目配置介绍

webpack简介


文件配置介绍

  • package.json

package.json总览全局,您可以在这里配置相当多的信息。

"name": "项目名称,不能以.(点)或者_(下划线)开头,不能包含大写字",  
"version": "项目版本号如:1.0.0",
"description": "项目描述"
"author": 作者名字
"private": 是否私有
"scripts": 配置控制台命令缩写,如下配置build命令
  "scripts": { 
    "build": "node build/build.js"// 使用node build/build.js打包与npm run build 效果一致
  },
"dependencies": 项目依赖库 
"devDependencies": 开发依赖库
"engines": 指定node和npm版本
"browserslist": 浏览器限制
  • build.js


    8.png

当我们运行npm run build的时候,本质上执行了node build/build.js文件。
process.stdout.write作用是打印输出。
colors : 让打包的时候有颜色。
module : 去掉内置模块信息
children :去掉子模块
chunks : 增加包信息(设置为 false 能允许较少的冗长输出)
chunkModules : 去除包里内置模块的信息
spinner是个带图标的日志输出,我们可以在打包的过程中增加一些提示,修改如下:

const spinner = ora({
    color: 'red',
    text: 'spinner的颜色设置为了红色并开始打包,请稍等一会儿'
})
spinner.start()

10.png

然后在const rm = require('rimraf')的回调中,使用spinner.stop()停止。

   if (stats.hasErrors()) {
      console.log(chalk.red('出错啦.\n'))
      process.exit(1)
    }
    console.log(chalk.yellow(
      '  Tip: built files are meant to be served over an HTTP server.\n' +
      '  Opening index.html over file:// won\'t work.\n'
    ))
    console.log(chalk.blue('打包成功'))
  • index.js
    'use strict' 使用严格模式
    assetsSubDirectory: 'static',// 静态资源目录,一般存放css,js,image等文件
    assetsPublicPath: '/',// 根目录
    proxyTable: {},// 解决跨域问题,后面解读
    host: 'localhost', // 地址
    port: 8080, // 端口号设置,端口号占用出现问题可在此处修改
    autoOpenBrowser: false,//是否在编译(输入命令行npm run dev)后打开http://localhost:8080/页面,
    errorOverlay: true, // 浏览器错误提示
    notifyOnErrors: true,// 跨平台错误提示
    poll: false, // 使用文件系统(file system)获取文件改动的通知devServer.watchOptions
    cacheBusting: true, // 使缓存失效
    cssSourceMap: true // 代码压缩后进行调bug定位将非常困难,于是引入sourcemap记录压缩前后的位置信息记录,当产生错误时直接定位到未压缩前的位置
      },
    useEslint: 是否使用Eslint Loader
    devtool: 选择source-map模式 开发环境推荐:cheap-module-eval-source-map,产环境推荐:cheap-module-source-map
    //unit的gzip命令用来压缩文件,gzip模式下需要压缩的文件的扩展名有js和css
    productionGzip: false,
    assetsRoot: path.resolve(__dirname, '../dist') 引号内设置打出来的包名和位置
    productionSourceMap: 是否生成调试文件

同理的,我们可以依照上面的配置,再配置一个build(生产环境设置)。

提示:此目录下包含:dev.env.js,test.env.js,prod.env.js,index.js这四个文件,dev代表开发环境配置,test代表测试环境配置,prod代表发布环境配置,你可以根据你的项目开发环境,配置相应的信息,比如项目的域名,如果在开发/测试/发布三个环境不一样,那可以配置到对应的js文件中。在build/build.js目录下的process.env.NODE_ENV确定使用那个环境配置。

在dev.env.js中可以配置请求地址,这时我们将proxyTable中的proxyTable设为"{}"
如果展示了跨域的问题,我们可以用proxyTable解决。
修改proxyTable如下:

 proxyTable: {
    '/anyWord': {
    target: 'your url',
    changeOrigin: true,
    pathRewrite: {
      '^/anyWord': ''
    },
    cookieDomainRewrite: 'localhost',

其中changeOrigin标识是否跨域,pathRewrite表示替换关键字(这里设置的anyWord会被默认拼接到请求的最后),target表示接口域名。
如果并不想所有的请求都使用代理,可以使用bypass。

bypass: function(req, res, proxyOptions) {
      if (req.headers.accept.indexOf("otherRequest") !== -1) {
        return "url + otherRequest";
      }
    }

代理可以设置多个。

  • check-version.js
    主要功能:
    1、检测node版本
    2、检测npm版本

  • utils.js
    主要功能:
    1、css加载器的相关配置
    2、对.vue文件之外的css文件或css预处理器文件进行处理

  • vue-loader
    主要功能:
    根据当前的开发环境对webpack中的vue-loader进行配置。

  • webpack.dev.conf.js
    配置webpack编译入口。
    配置webpack输出路径、名称和静态文件路径。
    配置不同模块的处理规则与命名规则。
    以下代码就是设置视频文件小于10kb,转换为base64文件。

  {
        test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
        loader: 'url-loader',
        options: {
          limit: 10000,
          name: utils.assetsPath('media/[name].[hash:7].[ext]')
        }
      },

  • webpack.dev.conf.js
    主要功能
    1、将hot-reload相关的代码添加到entry chunks
    2、合并基础的webpack配置
    3、使用styleLoaders
    4、配置Source Maps
    5、配置webpack插件

  • webpack.prod.conf.js.
    主要功能
    合并基础的webpack配置
    使用styleLoaders
    配置webpack的输出
    配置webpack插件
    gzip模式下的webpack插件配置
    webpack-bundle分析

    // 构建要编译输出的index.html,并在文件中嵌入资源文件
    new HtmlWebpackPlugin({
    // 输出的HTML文件名
    filename: config.build.index,
    // 模板文件路径
    template: 'index.html',
    // 设置为true或body可以将js代码放到<body>元素最后
    // 设置为head将js代码加到<head>里面
    // 设置为false所有静态资源css和JavaScript都不会注入到模板文件中
    inject: true,
    minify: {
       // 删除注释
       removeComments: true,
       // 合并空白
       collapseWhitespace: true,
       // 删除属性的引号
       removeAttributeQuotes: true
      },
      // 通过CommonsChunkPlugin控制chunks在html文件中添加的顺序  
      // 设置为dependency即按照它们之间的依赖关系添加
      chunksSortMode: 'dependency'
    }),
    // webpack将公共模块打包的vendor.js里面使用CommonsChunkPlugin将vendor.js分离到单独的文件
    new webpack.optimize.CommonsChunkPlugin({
      // 公共模块名字
      name: 'vendor',
      minChunks: function(module, count) {
        return (
          module.resource &&
          /\.js$/.test(module.resource) &&
          module.resource.indexOf(
            path.join(__dirname, '../node_modules')
          ) === 0
        )
      }
      
    // 使用CommonsChunkPlugin可以保证如果我们的第三方插件没有变动,在打包的时候可以不被重新的打包
    // 待到上线后就不会重新的加载以达到缓存的目的
    // 我们会获得webpack执行时间和输出一份json文件保存chunk的id和最终引用它们的文件印射关系
    new webpack.optimize.CommonsChunkPlugin({
      name: 'manifest',
      chunks: ['vendor']
    }),
    // 复制static文件夹内的静态资源到打包好的文件中
    // 具体的路径是之前我们设置的"config.build.assetsSubDirectory"
    new CopyWebpackPlugin([{
      from: path.resolve(__dirname, '../static'),
      to: config.build.assetsSubDirectory,
      ignore: ['.*']
    }])

    // 如果开启了Gzip压缩,使用以下配置
    if (config.build.productionGzip) {
       var CompressionWebpackPlugin = require('compression-webpack-plugin')
       webpackConfig.plugins.push(
         new CompressionWebpackPlugin({
         asset: '[path].gz[query]',
         algorithm: 'gzip',
         test: new RegExp(
           '\\.(' + config.build.productionGzipExtensions.join('|') +
        ')$'
      ),
      threshold: 10240,
      minRatio: 0.8
    })
  )
}

VUE学习之路四 创界第一个界面

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,825评论 4 377
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,887评论 2 308
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,425评论 0 255
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,801评论 0 224
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,252评论 3 299
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,089评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,216评论 2 322
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 31,005评论 0 215
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,747评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,883评论 2 255
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,354评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,694评论 3 265
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,406评论 3 246
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,222评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,996评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,242评论 2 287
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 36,017评论 2 281

推荐阅读更多精彩内容