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


Posted in Javascript onNovember 09, 2018

目录结构

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

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 build
npm 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/
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery多浏览器捕捉回车事件代码
Jun 22 Javascript
javascript new后的constructor属性
Aug 05 Javascript
一个JavaScript获取元素当前高度的实例
Oct 29 Javascript
JavaScript获取各大浏览器信息图示
Nov 20 Javascript
jQuery判断浏览器并动态调整select宽度的方法
Mar 02 Javascript
原生JS实现图片轮播切换效果
Dec 15 Javascript
node.js中grunt和gulp的区别详解
Jul 17 Javascript
OkHttp踩坑随笔为何 response.body().string() 只能调用一次
Jan 08 Javascript
详谈js的变量提升以及使用方法
Oct 06 Javascript
关于layui flow loading占位图的实现方法
Sep 21 Javascript
JavaScript进阶(三)闭包原理与用法详解
May 09 Javascript
原生JS实现相邻月份日历
Oct 13 Javascript
vue中如何去掉空格的方法实现
Nov 09 #Javascript
Vue press 支持图片放大功能的实例代码
Nov 09 #Javascript
KOA+egg.js集成kafka消息队列的示例
Nov 09 #Javascript
详解关于element el-button使用$attrs的一个注意要点
Nov 09 #Javascript
webpack4.x CommonJS模块化浅析
Nov 09 #Javascript
angular4笔记系列之内置指令小结
Nov 09 #Javascript
node版本管理工具n包使用教程详解
Nov 09 #Javascript
You might like
简单实现限定phpmyadmin访问ip的方法
2013/03/05 PHP
分享下php5类中三种数据类型的区别
2015/01/26 PHP
浅谈htmlentities 、htmlspecialchars、addslashes的使用方法
2016/12/09 PHP
PHP+iframe模拟Ajax上传文件功能示例
2019/07/02 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
2019/10/12 PHP
javascript 仿QQ滑动菜单效果代码
2010/09/03 Javascript
JavaScript类和继承 this属性使用说明
2010/09/03 Javascript
jquery ajax return没有返回值的解决方法
2011/10/20 Javascript
浅析JavaScript中两种类型的全局对象/函数
2013/12/05 Javascript
基于zepto.js实现仿手机QQ空间的大图查看组件ImageView.js详解
2015/03/05 Javascript
fastclick插件导致日期(input[type="date"])控件无法被触发该如何解决
2015/11/09 Javascript
Javascript编程中几种继承方式比较分析
2015/11/28 Javascript
JavaScript iframe数据共享接口实现方法
2016/01/06 Javascript
JQUERY表单暂存功能插件分享
2016/02/23 Javascript
功能强大的Bootstrap使用手册(一)
2016/08/02 Javascript
JS使用正则实现去掉字符串左右空格的方法
2016/12/27 Javascript
分享5个顶级的JavaScript Ajax组件库
2018/09/16 Javascript
JavaScript中的全局属性与方法深入解析
2020/06/14 Javascript
json.stringify()与json.parse()的区别以及用处
2021/01/25 Javascript
[55:25]VGJ.T vs Optic Supermajor小组赛D组 BO3 第三场 6.3
2018/06/04 DOTA
基于python的汉字转GBK码实现代码
2012/02/19 Python
Python如何读取MySQL数据库表数据
2017/03/11 Python
Python实现简单网页图片抓取完整代码实例
2017/12/15 Python
python SQLAlchemy的Mapping与Declarative详解
2019/07/04 Python
pandas的排序和排名的具体使用
2019/07/31 Python
Python多继承以及MRO顺序的使用
2019/11/11 Python
python 实现Flask中返回图片流给前端展示
2020/01/09 Python
TensorFLow 不同大小图片的TFrecords存取实例
2020/01/20 Python
Python和Bash结合在一起的方法
2020/11/13 Python
简单租房协议书
2014/04/09 职场文书
中学生家长评语大全
2014/04/16 职场文书
法学自荐信
2014/06/20 职场文书
迎新生欢迎词2015
2015/07/16 职场文书
2016年“七一建党节”广播稿
2015/12/18 职场文书
python爬取网页版QQ空间,生成各类图表
2021/06/02 Python
Python 数据可视化神器Pyecharts绘制图像练习
2022/02/28 Python