Webpack配置

it2022-06-25  87

 

 

参考地址: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()    ]) }     从最开始的编码,到打包、测试、上线等一整套流程。开启自己的项目工程吧!

 

转载于:https://www.cnblogs.com/sun-web/p/8335486.html


最新回复(0)