前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >详解基于Vue2.0项目的webpack配置文件

详解基于Vue2.0项目的webpack配置文件

作者头像
娜姐
发布于 2022-05-13 06:29:32
发布于 2022-05-13 06:29:32
2.3K00
代码可运行
举报
文章被收录于专栏:娜姐聊前端娜姐聊前端
运行总次数:0
代码可运行

Vue提供了一个很好的命令行工具:vue-cli,用来快速构建Vue项目。 现在,我们改造一个由vue-cli创建的simple project,使其提供更强大的功能。

1. 创建一个简单的Vue项目

vue init webpack-simple my-webpack-simple-demo

2. package.json
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  ...
  "scripts": {
    "dev": "cross-env NODE_ENV=development webpack-dev-server --open --hot --env=integrate",
    "build-test": "cross-env NODE_ENV=production webpack --progress --hide-modules --env=test",
    "build-release": "cross-env NODE_ENV=production webpack --progress --hide-modules --env=release"
  },
  "dependencies": {
    "vue": "^2.2.1"
  },
  "devDependencies": {
    "babel-core": "^6.0.0",
    "babel-loader": "^6.0.0",
    "babel-preset-latest": "^6.0.0",
    "clean-webpack-plugin": "^0.1.15",
    "cross-env": "^3.0.0",
    "css-loader": "^0.25.0",
    "element-ui": "^1.2.3",
    "extract-text-webpack-plugin": "^2.0.0-beta.4",
    "file-loader": "^0.9.0",
    "html-webpack-plugin": "^2.28.0",
    "node-sass": "^4.5.0",
    "sass-loader": "^5.0.1",
    "style-loader": "^0.13.2",
    "url-loader": "^0.5.8",
    "vue-cookie": "^1.1.3",
    "vue-loader": "^11.0.0",
    "vue-resource": "^1.2.1",
    "vue-router": "^2.3.0",
    "vue-style-loader": "^2.0.3",
    "vue-template-compiler": "^2.2.1",
    "vuex": "^2.2.1",
    "webpack": "^2.2.0",
    "webpack-dev-server": "^2.2.0"
  }
}
3. 文件结构

webpack.png

4. .babelrc

Babel是ES6转码器,可以将项目中用到的ES6语法编译为ES5语法。

我们需要安装babel-loader babel-core,然后新增.babelrc文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "presets": [
    ["latest", {
      "es2015": { "modules": false }
    }]
  ]
}
5.webpack.config.js

详解请看注释:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var path = require('path');
var webpack = require('webpack');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var ExtractTextPlugin = require('extract-text-webpack-plugin');
var CleanWebpackPlugin = require('clean-webpack-plugin');

var srcPath = path.join(__dirname, './src/');

/*-----------------根据process变量找到对应的webconfig文件-----------------*/
function getEnv() {
    var argv = process.argv.slice(2);
    for (var i = 0; i < argv.length; i++) {
        if (argv[i].indexOf('--env=') >= 0) {
            return argv[i].substr(6);
        }
    }
}
//webconfig是api配置文件。一般来说,不同的环境后台api地址会不同
//例如:test环境下,api为http://test.api.com; 
//release环境下,api为http://release.api.com; 
//需要根据不同的环境,把api配置给相应的ajax插件,如vue-resource, axios
//例如,配置vue-resource: Vue.http.options.root = webconfig.host;
var env = getEnv();
var configPath = '';
switch (env) {
    case 'test' :
        configPath = path.join(__dirname, './src/config/webconfig_test.js');
        break;
    default :
        configPath = path.join(__dirname, './src/config/webconfig_release.js');
}
/*-----------------webpack 配置-----------------*/
module.exports = {
    //完整写法为entry:{main:  './src/main.js'},所以,[name]默认为"main"
    //也可以按照喜好自行定义[name]的名字
    entry: './src/main.js',
    output: {
        //必须是绝对路径(所以这里用到的是path.resolve,而不是path.join)
        //指定文件打包的输入目录
        path: path.resolve(__dirname, './dist'),
        //output.path中的URL以HTML页面为基准,表示资源的发布地址
        //当配置过该属性后,打包文件中所有通过相对路径引用的资源都会被配置的路径所替换
        // webpack-dev-server也会默认从publicPath为基准,使用它来决定在哪个目录下启用服务,来访问webpack输出的文件。
        publicPath: '/',
        // 指定输出文件的名称,[hash]会自动给文件名加上hash后缀
        filename: 'js/build-[hash].js',
        //异步加载的JS文件不会被打包到output->path下,所以需要为其做专门配置
        //[id]会自动为异步文件添加序列号
        //这里,和vue-router配合,实现切换路由时按需加载JS文件
        chunkFilename: 'js/[id].build.js?[chunkhash]'
    },
    //注意:利用ExtractTextPlugin插件将css或者scss(require("style.css"))单独打包到一个CSS文件
    //这样,样式不会内联到JS里面
    module: {
        rules: [
            {
                test: /\.vue$/,
                loader: 'vue-loader',
                options: {
                    loaders: {
                        // Since sass-loader (weirdly) has SCSS as its default parse mode, we map
                        // the "scss" and "sass" values for the lang attribute to the right configs here.
                        // other preprocessors should work out of the box, no loader config like this necessary.
                        'scss': 'vue-style-loader!css-loader!sass-loader',
                        'sass': 'vue-style-loader!css-loader!sass-loader?indentedSyntax'
                    }
                    // other vue-loader options go here
                }
            },
            {
                test: /\.js$/,
                loader: 'babel-loader',
                exclude: /node_modules/
            },
            {
                test: /\.css$/,
                loader: ExtractTextPlugin.extract({
                    fallbackLoader: 'style-loader',
                    loader: 'css-loader'
                })
            },
            {
                test: /\.scss$/,
                loader: ExtractTextPlugin.extract({
                    fallback: 'style-loader',
                    //resolve-url-loader may be chained before sass-loader if necessary
                    use: ['css-loader', 'sass-loader']
                })
            },
            {
                test: /\.(png|jpg|gif|svg|ico)$/,
                loader: 'file-loader',
                options: {
                    //图片导出路径
                    name: 'images/[name].[ext]'
                }
            }
        ]
    },
    resolve: {
        //模块别名定义,方便后续直接引用别名
        //例如,引用webconfig模块,语法为: require('webconfig')
        alias: {
            'vue$': 'vue/dist/vue.esm.js',
            appCss: srcPath + 'sass/app.scss',
            favicon: srcPath + 'images/favicon.ico',
            webconfig: configPath,
            apiconfig: srcPath + 'config/apiconfig.js'
        }
    },
    //webpack-dev-server配置
    devServer: {
        historyApiFallback: true,
        noInfo: true,
        //指定服务器文件路径
        contentBase: "./dist",
        port: 9002
    },
    performance: {
        //不展示警告或错误提示
        hints: false
    },
    //选择一种source map来增强调试过程,该选项会影响构建和重构建的速度
    devtool: '#eval-source-map',
    plugins: [
        //定义全局插件,不需要require()引入,直接可以使用模块名,如:webconfig.host;
        new webpack.ProvidePlugin({
            webconfig: 'webconfig',
            API_CONFIG_URL: "apiconfig",
        }),
        // 依据一个简单的模板,帮你生成最终的Html5文件
        // 这个文件中自动引用了你打包后的JS文件。
        // 每次编译都在文件名中插入一个不同的哈希值
        new HtmlWebpackPlugin({
            template: __dirname + "/index.tpl.html",
            favicon: 'src/images/favicon.ico',
        }),
        //将CSS从JS文件中分离出来,并添加到输出html文件中
        new ExtractTextPlugin('css/' + '[name]-[hash].css'),
        //每次build时,先清除dist包
        new CleanWebpackPlugin(['dist'], {
            verbose: true,
            dry: false
        })
    ]
};
//生成环境下的配置,提供文件压缩功能
if (process.env.NODE_ENV === 'production') {
    module.exports.devtool = '#source-map';
    // http://vue-loader.vuejs.org/en/workflow/production.html
    module.exports.plugins = (module.exports.plugins || []).concat([
        new webpack.DefinePlugin({
            'process.env': {
                NODE_ENV: '"production"'
            }
        }),
        new webpack.optimize.UglifyJsPlugin({
            sourceMap: true,
            compress: {
                warnings: false
            }
        }),
        new webpack.LoaderOptionsPlugin({
            minimize: true
        })
    ])
}
6. 用到的插件plugins
1). cross-env

cross-env用来设置环境变量。 Node环境中的环境变量为NODE_ENV,用process.env.NODE_ENV访问该变量。 可以看到package.json中的scripts用到这个功能:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"scripts": {
    "dev": "cross-env NODE_ENV=development webpack-dev-server --open --hot --env=integrate"
  }
2). webpack-dev-server

webpack-dev-server提供了一个服务器实时重载(live reloading)功能。 webpack-dev-server是一个小型的node.js Express服务器,它使用webpack-dev-middleware中间件来为通过webpack打包生成的资源文件提供Web服务。

3). html-webpack-plugin

该插件可以生成一个HTML5文件,它可以动态添加script标签加载webpack生成包。如果生成包带hash值,那么,就必须用这个插件了。

4). extract-text-webpack-plugin

将JavaScript中导入的CSS提取为单个CSS文件。

5). clean-webpack-plugin

删除目标目录下所有文件

更多高阶内容,可移步《小专栏-娜姐聊前端》

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
多端多页面项目webpack打包实践与优化
webpack的核心是一切皆模块,所以它其实本质上就是个静态模块打包器。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图,其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle。
IMWeb前端团队
2019/12/04
2.2K0
Fis3 构建迁移 Webpack 之路
本文主要介绍了如何将一个使用webpack构建的web应用打包为适用于各浏览器的可执行文件。首先介绍了webpack和browserify的区别,然后说明了webpack的配置文件,紧接着介绍了如何设置多入口,并分析了生产环境基于node的webpack如何处理。最后,作者分享了如何对css、js代码进行压缩、图片进行优化以及支持多入口的打包结果。
腾讯IVWEB团队
2017/11/21
2K0
【webpack】从vue-cli 2x 到 3x 迁移与实践
左图项目结构为vue-cli 2x版本脚手架生成的项目,build文件夹包含了webpack配置
树酱
2020/07/03
1.1K0
初探webpack之从零搭建Vue开发环境
平时我们可以用vue-cli很方便地搭建Vue的开发环境,vue-cli确实是个好东西,让我们不需要关心webpack等一些繁杂的配置,然后直接开始写业务代码,但这会造成我们过度依赖vue-cli,忽视了webpack的重要性,当遇到一些特殊场景时候,例如Vue多入口的配置、优化项目的打包速度等等时可能会无从下手。当然现在才开始学习vue2 + webpack可能有点晚,毕竟现在都在考虑转移到vue3 + vite了哈哈。
WindRunnerMax
2021/10/20
1.2K1
使用Webpack5创建Vue2项目及优化
之前我们大多都是用Vue-Cli来创建项目,但是Vue-Cli已经停止更新了,并且Vue-Cli相当于一堆插件的集合体,我们想替换以下,或者想根据我们的项目优化以下,提升编译的性能,这时候可以自己用Webpack来配置项目。
码客说
2022/09/27
3.1K0
使用Webpack5创建Vue2项目及优化
webpack5构建一个小型简单vue项目 (练习)
webpack5构建vue 必要环境 安装ndejs 我们需要安装node 如果没有安装则安装 安装过则跳过 下载安装nodejs 执行 node -v npm -v [在这里插入图片描述] 初始化项目文件夹 新建一个空的项目 执行 npm init -y 初始化 npm init -y 会生成一个package.json [在这里插入图片描述] 安装webpack以及 html-webpack-plugin 控制台执行 npm i webpack webpack-cli webpack-dev-serv
代码哈士奇
2022/01/31
1.1K1
vue-cli 脚手架中 webpack 配置基础文件详解
vue-cli是构建vue单页应用的脚手架,输入一串指定的命令行从而自动生成vue.js+wepack的项目模板。这其中webpack发挥了很大的作用,它使得我们的代码模块化,引入一些插件帮我们完善功能可以将文件打包压缩,图片转base64等。后期对项目的配置使得我们对于脚手架自动生成的代码的理解更为重要,接下来我将基于webpack3.6.0版本结合文档将文件各个击破,纯干料。
前端教程
2018/07/27
1.4K0
webpack从零搭建开发环境
为了方便也可以这么写,使用 npm run 命令这个命令执行的时候默认会把 node_modules 的.bin 文件放到全局上,执行之后销毁npm run buildnpm run dev
小丑同学
2020/09/21
1.3K0
Webpack配置实战
本篇将从实践出发,搭建一个基础的支持模块化开发的项目,在第二章节《进阶配置》中使用 webpack 搭建一个 SASS + TS + React 的项目。
gogo2027
2022/10/17
1.3K0
从零开始配置webpack(基于webpack 4 和 babel 7版本)
webpack启动后会从 Entry 里配置的 Module 开始递归解析 Entry 依赖的所有Module.每找到一个Module,就会根据配置的Loader去找出对应的转换规则,对Module进行转换后,再解析出当前的Module依赖的Module.这些模块会以Entry为单位进行分组,一个Entry和其所有依赖的Module被分到一个组也就是一个Chunk。最好Webpack会把所有Chunk转换成文件输出。在整个流程中Webpack会在恰当的时机执行Plugin里定义的逻辑。
胡哥有话说
2019/09/12
6960
webpack 入门教程
本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle。
老马
2018/08/20
4.2K0
webpack 入门教程
webpack3.x文件配置
webpack3.x 主配置webpack.config.js文件,每个模块的详细信息都有一定的注释,如果有不对的地方,还请指教!
White feathe
2021/12/08
9660
webpack搭建基础vue项目
npm i vue vue-loader vue-template-compiler cross-env css-loader style-loader url-loader file-loader html-webpack-plugin webpack-dev-server
切图仔
2022/09/08
3220
2022-webpack5实战教程
打包成功之后,查看dist目录下的index.html文件是否引用了打包之后的js
gogo2027
2022/10/17
9440
07 . 前端工程化(ES6模块化和webpack打包,配置Vue组件加载器和发布项目)
推荐使用ES6模块化,因为AMD,CMD局限使用与浏览器端,而CommonJS在服务器端使用。 ES6模块化是浏览器端和服务器端通用的规范.
iginkgo18
2020/11/24
2.7K0
07 . 前端工程化(ES6模块化和webpack打包,配置Vue组件加载器和发布项目)
Webpack多入口文件、热更新等体验
Webpack现今流行的前端打包工具,今儿本人也来分享下自己学习体验。 一、html-webpack-plugin 实现html模板文件的解析与生成 在plugins加入HtmlWebpackPlugin的配置,如果是多个入口文件,则需要对应加入多个HtmlWebpackPlugin功能。 var HtmlWebpackPlugin = require('html-webpack-plugin'); entry:{ ma: './src/ma', /** .:必须要,表示运行时的根目录,否则找不到文
sam dragon
2018/01/17
2.8K0
Webpack4 搭建 Vue 项目
由于 Parcel 打包工具的影响,webpack4 也追求零配置搭建项目。而前阵子出现的 vue-cli 3.0也是基于 webpack4 零配置的思想创建的。对于一些习惯webpack3 的开发者难免有些不习惯。本文就带你绕过 vue-cli,用 webpack4 一步步搭建 vue 项目。
小皮咖
2019/11/05
1.1K0
Webpack4 常用配置详解
实现Webpack的打包最基本的就是配置好入口、出口,npm install webpack后在根目录创建webpack.config.js,代码如下:
EchoROne
2022/08/15
1.7K0
59.Vue 使用webpack构建vue项目
在前面的篇章中,已经说明了 webpack4 的基本使用,那么本章节开始在 webpack4 中构建vue项目,同时对比看看这种构建方式,与在网页script导入 vue.js 中的区别。
Devops海洋的渔夫
2020/08/20
2.7K0
59.Vue 使用webpack构建vue项目
【One by one系列】一步步学习webpack打包
0配置,webpack4受Parcel打包工具启发,尽可能的让开发者运行项目的成本变低。webpack4不再强制需要webpack.config.js作为打包的入口配置文件,默认的入口为./src/和默认的出口./dist,小项目的福音。
DDGarfield
2022/06/23
4300
相关推荐
多端多页面项目webpack打包实践与优化
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验