Vue工程模板文件 webpack打包配置方法


Posted in Javascript onDecember 26, 2017

1、github

github地址:https://github.com/MengFangui/VueProjectTemplate

2、webpack配置

(1)基础配置webpack.base.config.js

const path = require('path');
//处理共用、通用的js
const webpack = require('webpack');
//css单独打包
const ExtractTextPlugin = require('extract-text-webpack-plugin');
module.exports = {
 //入口文件
 entry: {
  main: './src/main',
  vendors: './src/vendors'
 },
 output: {
  path: path.join(__dirname, './dist')
 },
 module: {
  rules: [
   //vue单文件处理
   {
    test: /\.vue$/,
    use: [{
     loader: 'vue-loader',
     options: {
      loaders: {
       less: ExtractTextPlugin.extract({
        //minimize 启用压缩
        use: ['css-loader?minimize', 'autoprefixer-loader', 'less-loader'],
        fallback: 'vue-style-loader'
       }),
       css: ExtractTextPlugin.extract({
        use: ['css-loader', 'autoprefixer-loader', 'less-loader'],
        fallback: 'vue-style-loader'
       })
      }
     }
    }]
   },
   //iview文件夹下的js编译处理
   {
    test: /iview\/.*?js$/,
    loader: 'babel-loader'
   },
   //js编译处理
   {
    test: /\.js$/,
    loader: 'babel-loader',
    exclude: /node_modules/
   },
   //css处理
   {
    test: /\.css$/,
    use: ExtractTextPlugin.extract({
     //minimize 启用压缩
     use: ['css-loader?minimize', 'autoprefixer-loader'],
     fallback: 'style-loader'
    })
   },
   //less处理
   {
    test: /\.less/,
    use: ExtractTextPlugin.extract({
     use: ['css-loader?minimize', 'autoprefixer-loader', 'less-loader'],
     fallback: 'style-loader'
    })
   },
   //图片处理
   {
    test: /\.(gif|jpg|png|woff|svg|eot|ttf)\??.*$/,
    loader: 'url-loader?limit=1024'
   },
   //实现资源复用
   {
    test: /\.(html|tpl)$/,
    loader: 'html-loader'
   }
  ]
 },
 resolve: {
  //自动扩展文件后缀名,意味着我们require模块可以省略不写后缀名
  extensions: ['.js', '.vue'],
  //模块别名定义,方便后续直接引用别名,无须多写长长的地址
  alias: {
   'vue': 'vue/dist/vue.esm.js'
  }
 }
};

(2)开发环境配置webpack.dev.config.js

//处理共用、通用的js
const webpack = require('webpack');
//处理html模板
const HtmlWebpackPlugin = require('html-webpack-plugin');
//css单独打包
const ExtractTextPlugin = require('extract-text-webpack-plugin');
//合并配置
const merge = require('webpack-merge');
const webpackBaseConfig = require('./webpack.base.config.js');
//fs模块用于对系统文件及目录进行读写操作
const fs = require('fs');
//编译前用node生成一个env.js的文件,用来标明当前是开发(development)还是生产环境(production)
fs.open('./src/config/env.js', 'w', function(err, fd) {
 const buf = 'export default "development";';
 fs.write(fd, buf, 0, buf.length, 0, function(err, written, buffer) {});
});
module.exports = merge(webpackBaseConfig, {
 //打包代码的同时生成一个sourcemap文件,并在打包文件的末尾添加//# souceURL,注释会告诉JS引擎原始文件位置
 devtool: '#source-map',
 output: {
  //线上环境路径
  publicPath: '/dist/',
  filename: '[name].js',
  chunkFilename: '[name].chunk.js'
 },
 plugins: [
  //css单独打包
  new ExtractTextPlugin({
   filename: '[name].css',
   allChunks: true
  }),
  //通用模块编译
  new webpack.optimize.CommonsChunkPlugin({
   //提取的公共块的块名称(chunk)
   name: 'vendors',
   //生成的通用的文件名
   filename: 'vendors.js'
  }),
  new HtmlWebpackPlugin({
   //输出文件
   filename: '../index.html',
   //模板文件
   template: './src/template/index.ejs',
   //不插入生成的 js 文件,只是单纯的生成一个 html 文件
   inject: false
  })
 ]
});

(3)线上环境配置webpack.prod.config.js

//处理共用、通用的js
const webpack = require('webpack');
//处理html模板
const HtmlWebpackPlugin = require('html-webpack-plugin');
//css单独打包
const ExtractTextPlugin = require('extract-text-webpack-plugin');
//合并配置
const merge = require('webpack-merge');
const webpackBaseConfig = require('./webpack.base.config.js');
//fs模块用于对系统文件及目录进行读写操作
const fs = require('fs');
//编译前用node生成一个env.js的文件,用来标明当前是开发(development)还是生产环境(production)
fs.open('./src/config/env.js', 'w', function (err, fd) {
 const buf = 'export default "production";';
 fs.write(fd, buf, 0, buf.length, 0, function (err, written, buffer){});
});
module.exports = merge(webpackBaseConfig, {
 output: {
  //线上环境路径
  publicPath: 'dist/',
  filename: '[name].[hash].js',
  chunkFilename: '[name].[hash].chunk.js'
 },
 plugins: [
  new ExtractTextPlugin({
   //css单独打包
   filename: '[name].[hash].css',
   allChunks: true
  }),
  //通用模块编译
  new webpack.optimize.CommonsChunkPlugin({
   //提取的公共块的块名称(chunk)
   name: 'vendors',
   //生成的通用的文件名
   filename: 'vendors.[hash].js'
  }),
  new webpack.DefinePlugin({
   'process.env': {
    NODE_ENV: '"production"'
   }
  }),
  //js压缩
  new webpack.optimize.UglifyJsPlugin({
   compress: {
    warnings: false
   }
  }),
  new HtmlWebpackPlugin({
   //输出文件
   filename: '../index_prod.html',
   //模板文件
   template: './src/template/index.ejs',
   //不插入生成的 js 文件,只是单纯的生成一个 html 文件
   inject: false
  })
 ]
});

(4)package.json文件

{
 "name": "iview-project",
 "version": "2.1.0",
 "description": "A base project with Vue.js2、Vue-Router、webpack2 and with iView2.",
 "main": "index.js",
 "scripts": {
 "init": "webpack --progress --config webpack.dev.config.js",
 "dev": "webpack-dev-server --content-base ./ --open --inline --hot --compress --history-api-fallback --config webpack.dev.config.js",
 "build": "webpack --progress --hide-modules --config webpack.prod.config.js"
 },
 "repository": {
 "type": "git",
 "url": "git+https://github.com/iview/iview-project.git"
 },
 "author": "Aresn",
 "license": "MIT",
 "dependencies": {
 "vue": "^2.2.6",
 "vue-router": "^2.2.1",
 "iview": "^2.0.0-rc.8"
 },
 "devDependencies": {
 "autoprefixer-loader": "^2.0.0",
 "babel": "^6.23.0",
 "babel-core": "^6.23.1",
 "babel-loader": "^6.2.4",
 "babel-plugin-transform-runtime": "^6.12.0",
 "babel-preset-es2015": "^6.9.0",
 "babel-runtime": "^6.11.6",
 "css-loader": "^0.23.1",
 "extract-text-webpack-plugin": "^2.0.0",
 "file-loader": "^0.8.5",
 "html-loader": "^0.3.0",
 "html-webpack-plugin": "^2.28.0",
 "less": "^2.7.1",
 "less-loader": "^2.2.3",
 "style-loader": "^0.13.1",
 "url-loader": "^0.5.7",
 "vue-hot-reload-api": "^1.3.3",
 "vue-html-loader": "^1.2.3",
 "vue-loader": "^11.0.0",
 "vue-style-loader": "^1.0.0",
 "vue-template-compiler": "^2.2.1",
 "webpack": "^2.2.1",
 "webpack-dev-server": "^2.4.1",
 "webpack-merge": "^3.0.0"
 },
 "bugs": {
 "url": "https://github.com/iview/iview-project/issues"
 },
 "homepage": "https://www.iviewui.com"
}

ps:下面看下如何使用webpack打包vue项目?

1、安装nodejs:使用webpack打包需要用到npm,npm(node package manager)是nodejs的包管理器,用于node插件管理(包括安装、卸载、管理依赖等),所以需要先下载安装nodejs,安装完成后使用npm -v查看是否安装完成;

2、安装cnpm(此步骤为非必须):因为npm安装插件是从国外的网站上下载的,由于网络影响,很容易就出现异常,cnpm是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。 使用npm install -g cnpm --registry=https://registry.npm.taobao.org安装,之后可以使用cnpm来代替npm;

3、全局安装vue-cli脚手架,npm install -g vue-cli (不加-g安装到当前目录;加-g安装到系统的node目录),安装完成后使用vue -V查看;

4、创建一个基于webpack模板的新项目(下载模板);使用 vue init webpack my-project(项目文件夹名);接下来进行一系列的设置后,就下载好了一个vue模板了;

5、cd my-project 进入项目文件夹;使用npm install命令安装package.json文件里的依赖,会根据前端项目的依赖关系下载好相关的组件,存在项目目录的node_modules文件夹下;

6、安装node_modules依赖后,使用命令 npm run dev 启动项目(dev配置在package.json文件中)。

总结

以上所述是小编给大家介绍的Vue工程模板文件 webpack打包,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
理解Javascript_09_Function与Object
Oct 16 Javascript
js时间戳格式化成日期格式的多种方法
Nov 11 Javascript
JS实现控制表格只显示行边框或者只显示列边框的方法
Mar 31 Javascript
jQuery中 $ 符号的冲突问题及解决方案
Nov 04 Javascript
详解javascript获取url信息的常见方法
Dec 19 Javascript
Angular2使用jQuery的方法教程
May 28 jQuery
解决vue处理axios post请求传参的问题
Mar 05 Javascript
详解create-react-app 自定义 eslint 配置
Jun 07 Javascript
vue-vuex中使用commit提交mutation来修改state的方法详解
Sep 16 Javascript
微信小程序模板消息限制实现无限制主动推送的示例代码
Aug 27 Javascript
javascript网页随机点名实现过程解析
Oct 15 Javascript
vue与django集成打包的实现方法
Nov 11 Javascript
微信小程序出现wx.navigateTo页面不跳转问题的解决方法
Dec 26 #Javascript
Webpack实战加载SVG的方法
Dec 26 #Javascript
vue学习教程之带你一步步详细解析vue-cli
Dec 26 #Javascript
基于vue-cli配置lib-flexible + rem实现移动端自适应
Dec 26 #Javascript
基于 flexible 的 Vue 组件:Toast -- 显示框效果
Dec 26 #Javascript
细说webpack源码之compile流程-rules参数处理技巧(2)
Dec 26 #Javascript
AngularJS实现的根据数量与单价计算总价功能示例
Dec 26 #Javascript
You might like
理解php原理的opcodes(操作码)
2010/10/26 PHP
json的键名为数字时的调用方式(示例代码)
2013/11/15 PHP
十大使用PHP框架的理由
2015/09/26 PHP
php使用pdo连接sqlite3的配置示例
2016/05/27 PHP
JavaScript中神奇的call()方法
2015/03/12 Javascript
jQuery结合CSS制作动态的下拉菜单
2015/10/27 Javascript
JavaScript匿名函数之模仿块级作用域
2015/12/12 Javascript
VueJs与ReactJS和AngularJS的异同点
2016/12/12 Javascript
js获取浏览器的各种属性
2017/04/27 Javascript
微信小程序 setData使用方法及常用错误解决办法
2017/05/11 Javascript
详解vue-resource promise兼容性问题
2017/06/20 Javascript
AngularJS基于MVC的复杂操作实例讲解
2017/12/31 Javascript
详解如何在react中搭建d3力导向图
2018/01/12 Javascript
使用typescript构建Vue应用的实现
2019/08/26 Javascript
nuxt.js写项目时增加错误提示页面操作
2020/11/05 Javascript
Python下rrdtool模块的基本使用方法
2015/11/13 Python
利用Python破解斗地主残局详解
2017/06/30 Python
转换科学计数法的数值字符串为decimal类型的方法
2018/07/16 Python
python使用BeautifulSoup与正则表达式爬取时光网不同地区top100电影并对比
2019/04/15 Python
将Python字符串生成PDF的实例代码详解
2019/05/17 Python
python根据文本生成词云图代码实例
2019/11/15 Python
css3实现画半圆弧线的示例代码
2017/11/06 HTML / CSS
网上签名寄语活动留言
2014/01/18 职场文书
列车长先进事迹材料
2014/01/25 职场文书
打架检讨书300字
2014/02/02 职场文书
会计与审计专业自荐信范文
2014/03/15 职场文书
个人公开承诺书
2014/03/28 职场文书
人资专员岗位职责
2014/04/04 职场文书
班主任对学生的评语
2014/04/26 职场文书
2014年度党员自我评议
2014/09/13 职场文书
幼儿园感恩节活动方案2014
2014/10/11 职场文书
银行自荐信怎么写
2015/03/05 职场文书
2016毕业实习单位评语大全
2015/12/01 职场文书
某某幼儿园的教育教学管理调研分析报告
2019/11/29 职场文书
Python中文纠错的简单实现
2021/07/07 Python
Java 实现限流器处理Rest接口请求详解流程
2021/11/02 Java/Android