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 相关文章推荐
prototype Element学习笔记(篇二)
Oct 26 Javascript
ajaxControlToolkit AutoCompleteExtender的用法
Oct 30 Javascript
用jQuery中的ajax分页实现代码
Sep 20 Javascript
jQuery中(function(){})()执行顺序的理解
Mar 05 Javascript
JavaScript实现数字数组按照倒序排列的方法
Apr 06 Javascript
jQuery常见面试题之DOM操作详析
Jul 05 jQuery
vue中使用element-ui进行表单验证的实例代码
Jun 22 Javascript
详解Angularjs 自定义指令中的数据绑定
Jul 19 Javascript
bootstrap下拉分页样式 带跳转页码
Dec 29 Javascript
微信小程序实现获取小程序码和二维码java接口开发
Mar 29 Javascript
解决vuex刷新状态初始化的方法实现
Aug 15 Javascript
Element InputNumber 计数器的实现示例
Aug 03 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
PHP中使用unset销毁变量并内存释放问题
2012/07/05 PHP
一个基于phpQuery的php通用采集类分享
2014/04/09 PHP
php 购物车完整实现代码
2014/06/05 PHP
PHP图片处理之使用imagecopyresampled函数裁剪图片例子
2014/11/19 PHP
PHP使用JSON和将json还原成数组
2015/02/12 PHP
php注册和登录界面的实现案例(推荐)
2016/10/24 PHP
详解php中curl返回false的解决办法
2019/03/18 PHP
Prototype Object对象 学习
2009/07/12 Javascript
js showModalDialog参数的使用详解
2014/01/07 Javascript
jQuery实现的动态伸缩导航菜单实例
2015/05/07 Javascript
Google 地图控件集详解及实例代码
2016/08/06 Javascript
文件上传插件SWFUpload的使用指南
2016/11/29 Javascript
Angular.js实现注册系统的实例详解
2016/12/18 Javascript
javascript 的变量、作用域和内存问题
2017/04/19 Javascript
js学习心得_一个简单的动画库封装tween.js
2017/07/14 Javascript
详解js的作用域、预解析机制
2018/02/05 Javascript
webpack4简单入门实例
2018/09/06 Javascript
JS 实现微信扫一扫功能
2018/09/14 Javascript
原生js实现自定义滚动条组件
2021/01/20 Javascript
Python爬取读者并制作成PDF
2015/03/10 Python
Python批量转换文件编码格式
2015/05/17 Python
wxPython使用系统剪切板的方法
2015/06/16 Python
浅谈插入排序算法在Python程序中的实现及简单改进
2016/05/04 Python
Python中的并发处理之asyncio包使用的详解
2018/04/03 Python
Python实现E-Mail收集插件实例教程
2019/02/06 Python
用python实现刷点击率的示例代码
2019/02/21 Python
Python3.7 dataclass使用指南小结
2019/02/22 Python
Python实现截取PDF文件中的几页代码实例
2019/03/11 Python
美国校服网上商店:French Toast
2019/10/08 全球购物
大学生简单自荐信
2013/11/10 职场文书
青年文明号事迹材料
2014/01/18 职场文书
银行开业庆典方案
2014/02/06 职场文书
房屋出售协议书
2014/04/10 职场文书
终止劳动合同协议书
2014/10/05 职场文书
公司管理建议书
2015/09/14 职场文书
go语言基础 seek光标位置os包的使用
2021/05/09 Golang