webpack 静态资源集中输出的方法示例

作者 : 开心源码 本文共3596个字,预计阅读时间需要9分钟 发布时间: 2022-05-12 共196人阅读

目录结构

copy-webpack-plugin

工作中会有少量已经存在但在项目中没有引用的图片资源或者者其余静态资源(比方设计图、开发文档),这些静态资源有可能是文档,也有可能是少量额外的图片。打包时保留这些静态资源,直接打包到制定文件夹

安装依赖

cnpm install copy-webpack-plugin --save-dev

webpack.config.js

  • from:要打包的静态资源目录地址,这里的__dirname是指项目目录下,是node的一种语法,可以直接定位到本机的项目目录中。
  • to:要打包到的文件夹路径,跟随output配置中的目录。所以不需要再自己加__dirname。
const copyWebpackPlugin = require('copy-webpack-plugin');...  plugins: [    new copyWebpackPlugin([{      from: __dirname + '/src/public',      to:'./public'    }])  ],

打包,运行

npm run buildnpm run server

webpack.config.js一律代码

const path = require('path');const glob = require('glob');const uglify = require('uglifyjs-webpack-plugin');const htmlPlugin = require('html-webpack-plugin');const ExtractTextPlugin = require("extract-text-webpack-plugin");const PurifyCSSPlugin = require('purifycss-webpack');const entry = require('./webpack_config/entry_webpack');const webpack = require('webpack');const copyWebpackPlugin = require('copy-webpack-plugin');console.log(encodeURIComponent(process.env.type));if (process.env.type == 'build') {  var website = {    publicPath: "http://pengrongjie.top:1717/"  }  } else {  var website = {    publicPath: "http://192.168.1.9:1717/"  } } module.exports = {  // devtool: 'source-map',  // 入口   entry: {    entry: './src/entry.js',    jquery: 'jquery',    vue:'vue'  },  // entry:entry.path,  // 出口  output: {    //绝对路径    path: path.resolve(__dirname, 'dist'),    filename: '[name].js',    publicPath: website.publicPath  },  // 板块  module: {    //规则    rules: [      // {      //   test: /\.css$/,      //   use: [      //     {      //       loader:'style-loader'      //     }      //   ]      // },      {        test: /\.css$/,        use: ExtractTextPlugin.extract({          fallback: "style-loader",          // use: "css-loader"          use: [            { loader: 'css-loader', options: { importLoaders: 1 } },            'postcss-loader'          ]        })      },      {        test: /\.(png|jpg|gif)/,        use: [{          loader: 'url-loader',          options: {            limit: 5000,            outputPath: 'images/',          }        }]      }, {        test: /\.(htm|html)$/i,        use: ['html-withimg-loader']      },      // {      //   test: /\.less$/,      //   use: [{      //     loader: 'style-loader'      //   }, {      //     loader: 'css-loader'      //   }, {      //     loader: 'less-loader'      //   }]      // }      {        test: /\.less$/,        use: ExtractTextPlugin.extract({          use: [{            loader: 'css-loader',            options: { importLoaders: 1 }          }, {            loader: 'less-loader'          },'postcss-loader'],          fallback: 'style-loader'        })      },      // {      //   test: /\.scss$/,      //   use: [{      //     loader:'style-loader'      //   },{      //     loader:'css-loader'      //   },{      //     loader:'sass-loader'      //   }]      // },      {        test: /\.scss$/,        use: ExtractTextPlugin.extract({          use: [{            loader: 'css-loader',            options: { importLoaders: 1 }          }, {            loader: 'sass-loader'            },            'postcss-loader'],          fallback: 'style-loader'        })      },      // {      //   test:/\.(js|jsx)$/,      //   use:{      //     loader:'babel-loader',      //     options:{      //       presets:[      //         'es2015',      //         'react'      //       ]      //     }      //   },      //   //过滤掉,不编译node_modules中的文件,      //   exclude:/node_modules/      // },      {        test:/\.(js|jsx)$/,        use:{          loader:'babel-loader',        },        //过滤掉,不编译node_modules中的文件,        exclude:/node_modules/      }           ]  },  //插件  plugins: [    // new webpack.ProvidePlugin({    //   $:'jquery'    // }),    // new uglify()    new htmlPlugin({      minify: {        removeAttributeQuotes: true      },      hash: true,      template: './src/index.html'    }),    new ExtractTextPlugin("css/index.css"),    new PurifyCSSPlugin({      paths:glob.sync(path.join(__dirname,'src/*.html')),    }),    new webpack.BannerPlugin('jie的注释'),    // new webpack.optimize.CommonsChunkPlugin({    //   name: 'jquery',    //   filename: 'assets/js/jquery.min.js',    //   minChunks:2    // })    new webpack.optimize.CommonsChunkPlugin({      name: ['jquery','vue'],      filename: 'assets/js/[name].js',      minChunks:2    }),    new copyWebpackPlugin([{      from: __dirname + '/src/public',      to:'./public'    }])  ],  //开发服务  devServer: {    contentBase: path.resolve(__dirname, 'dist'),    host: '192.168.1.9',    compress: true, //服务端能否启用压缩    port: 1717  },  watchOptions: {    //检测修改的时间,以毫秒为单位    poll: 1000,    //防止重复保存而发生重复编译错误。这里设置的500是半秒内重复保存,不进行打包操作    aggregateTimeout: 500,    //不监听的目录    ignored:/node_modules/  }}

最后

为了帮助大家让学习变得轻松、高效,给大家免费分享一大批资料,帮助大家在成为全栈工程师,乃至架构师的路上披荆斩棘。在这里给大家推荐一个前台全栈学习交流圈:866109386.欢迎大家进群交流探讨,学习交流,共同进步。

当真正开始学习的时候难免不知道从哪入手,导致效率低下影响继续学习的信心。

但最重要的是不知道哪些技术需要重点掌握,学习时频繁踩坑,最终白费大量时间,所以有有效资源还是很有必要的。

最后祝福所有遇到瓶疾且不知道怎样办的前台程序员们,祝福大家在往后的工作与面试中一切顺利。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » webpack 静态资源集中输出的方法示例

发表回复