zoukankan      html  css  js  c++  java
  • Webpack配置

    参考地址:https://www.jianshu.com/p/42e11515c10f

    一、什么是Webpack

      前端构建工具 ;目的就是把有依赖关系的各种文件,打包成一系列的静态资源。

      主要是为了更好的适配大型单页面应用程序开发(SPA)。

           webpack可以使其代码分离,按需加载。以及静态资源模块化无缝结合。

      webpack简单点来说就是一个配置文件,所有的黑魔法都是在这一个文件中发生的。 这个配置文件主要可以分为以下几个模块:

      1、entry(入口文件)

      

      2、output(出口)

      

      3、module(模块)

      

      在webpack中一切皆Module模块。

      比如 :我们在项目中需要引用.json文件,只需配置一个json-loader即可。引用相关的jquery插件,配置一个imports-loader即可...然后在页面中可以通过require方式 或者 ES6语法import直接引入就好。

      4、plugins 插件

      

      比如:html模板,CSS行内样式提取器,热加载....

      

    二、webpack能帮我们做什么?

      1、代码分割,按需加载。

      2、图片自动转成base64。

      3、自动打包编译压缩混淆,添加md5..

    使用Vue.js来搭建一个SPA单页。那么可能你的Webpack配置如下:

    var webpack = require("webpack");

    var path = require('path');// NodeJS中的Path对象,用于处理目录的对象,提高开发效率。
    var HtmlWebpackPlugin = require('html-webpack-plugin');//webpack html模板插件
    var ExtractTextPlugin = require("extract-text-webpack-plugin"); //css提取插件
    var CopyWebpackPlugin = require('copy-webpack-plugin');//复制文件
    var CleanPlugin = require('clean-webpack-plugin')//webpack插件,用于清除目录文件
    var production = process.env.NODE_ENV;
    module.exports = {
        // 入口文件地址
        entry:{
            index : ['./src/main.js']
        },
        // 输出
        output: {
            path: path.resolve(__dirname, './dist'), //入口文件的输出地址
            filename: production ? 'js/[name].[hash:8].js' '[name].js',
            //[name]这里是webpack提供的根据路口文件自动生成的名字
            publicPath: ""//静态资源在server服务上和打包输出的地址
        },
        resolve: {
             //设置require或import的时候可以不需要带后缀
            extensions: ['''.js''.vue''.scss''.less''.css']
        },
        // 服务器配置相关,自动刷新!
        devServer: {
            historyApiFallback: true,
            hot: true,
            inline: true,
            port: 8010//端口
            //contentBase: path.join(__dirname, '/dist/view/')//配置网站根目录
        },
        // 加载器
        module: {
            // 加载器
            loaders: [
                {
                    test: /.vue$/,
                    loader: 'vue'
                },
                {
                    test: /.css$/,
                    loader: ExtractTextPlugin.extract("style","css")
                },
                {
                    test: /.scss$/,
                    loader: ExtractTextPlugin.extract("style-loader""css!sass")
                },
                {
                    test: /.js$/,
                    loader: 'babel',
                    exclude: /node_modules/
                },
                {
                    test: /.json$/,
                    loader: 'json'
                },
                {
                    test: /.(png|jpg|gif|svg)$/,
                    loader: 'file',
                    query: {
                        limit: 8000,
                        name: '../images/[name].[ext]?[hash:4]'
                    }
                },
                {
                    test: /.(woff|woff2|ttf|eot|svg)(?v=[0-9].[0-9].[0-9])?$/,
                    loader: 'file-loader?name=./fonts/[name].[ext]'
                }
            ]
        },
        vue: {
            loaders: {
                css: 'style!css!autoprefixer',
            }
        },
        // 转化成es5的语法
        babel: {
            presets: ['es2015'],
            plugins: ['transform-runtime']
        },
        plugins: [
            new webpack.ProvidePlugin({ //全局配置加载
               "$""jquery",
               "jQuery""jquery",
               "window.jQuery""jquery"
            }),
            new CleanPlugin(['dist']),
            new ExtractTextPlugin(production ? "./css/[name].[hash:8].css" "./css/[name].css"),
            //单独使用link标签加载css并设置路径,相对于output配置中的publickPath
            new HtmlWebpackPlugin({
                title: 'vue-webpack-test',
                //favicon: './src/img/favicon.ico', //favicon路径,通过webpack引入同时可以生成hash值
                filename: './index.html'//生成的html存放路径,相对于path
                template: './src/view/index.html'//html模板路径
                inject: true//允许插件修改哪些内容,包括head与body
                //hash: true, //为静态资源生成hash值
                cache:false,//是否缓存
                //chunks: ['main'],//需要引入的chunk,不配置就会引入所有页面的资源
                minify: { //压缩HTML文件
                    removeComments: true//移除HTML中的注释
                    collapseWhitespace: false //删除空白符与换行符
                }
            }),
            new webpack.HotModuleReplacementPlugin(),//热加载
            new webpack.optimize.OccurenceOrderPlugin(),
            //复制文件,输出路径相对应path
            new CopyWebpackPlugin([
                {from: 'src/images', to: '/images'},
                {from: 'src/css', to: '/css'}
            ])
        ],
        //添加了此项,则表明从外部引入,内部不会打包合并进去
        externals: {
            jquery: 'window.jQuery'
        },
        // 开启source-map,webpack有多种source-map,在官网文档可以查到
        devtool: '#eval-source-map'
    };
    //判断为生产模式,压缩js
    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({
          compress: {
            warnings: false
          }
        }),
        new webpack.optimize.OccurenceOrderPlugin()
      ])
    }
     
     
    从最开始的编码,到打包、测试、上线等一整套流程。开启自己的项目工程吧!
  • 相关阅读:
    多线程
    事务的概念与四大特性(ACID)
    Error和Exception的区别
    运算符的使用与注意事项(二)
    运算符的使用与注意事项(一)
    GOJS使用--前端拓扑图
    python算法实现分治法demo
    MySQL主从复制配置
    MySQL锁
    show profile查看SQL执行生命周期
  • 原文地址:https://www.cnblogs.com/sun-web/p/8335486.html
Copyright © 2011-2022 走看看