使用process.argv 获取命令行使用的参数

  1. // 判断是否带production参数,production会压缩js
  2. var isprod = false;
  3. for (var i in process.argv) {
  4. if (process.argv[i] === "-p" || process.argv[i] === "--production") {
  5. isprod = true;
  6. break;
  7. }
  8. }

url-loader 路径不正确,可通过 publicPath进行配置

  1. output: {
  2. //context: path.resolve(__dirname, 'scripts'),
  3. path: path.resolve(HTML_DIST_PATH, "assets"),
  4. publicPath: '/dist/assets/',//当生成的资源文件和站点不在同一地方时需要配置改地址 e.g.:站点在src,资源生成到/src/static/dist,那么publicPath="/static/dist"
  5. filename: "[name].[hash:6].js",
  6. chunkFilename: "[id].chunk.js",
  7. }

html-webpack-plugin minify: true 报错,请改成

  1. new HtmlWebpackPlugin({
  2. title: '',
  3. template: currentpath,
  4. filename: currentpath.replace("\\html\\", "\\dist\\"),
  5. minify: {
  6. "removeAttributeQuotes": true,
  7. "removeComments": true,
  8. "removeEmptyAttributes": true,
  9. }
  10. //chunks: ['index', 'vendors'], // 配置该html文件要添加的模块
  11. inject: 'body'
  12. })
  13.  
  14. //extract-text-webpack-plugin 同时使用style-loader和postcss-loader时会报错,将style-loader移除
  15. ExtractTextPlugin.extract(["css-loader", "postcss-loader"])

完整的配置文件

  1. var fs = require('fs');
  2. var path = require('path');
  3. var webpack = require('webpack');
  4. var HtmlWebpackPlugin = require('html-webpack-plugin'); // 自动写入将引用写入html
  5. var CommonsChunkPlugin = require("webpack/lib/optimize/CommonsChunkPlugin"); // 提取公共模块
  6. var ExtractTextPlugin = require("extract-text-webpack-plugin");// 默认的webpack 会将require("style.css")文件嵌入js文件中,使用该插件会将css从js中提取出来
  7. var CleanWebpackPlugin = require('clean-webpack-plugin'); // 删除文件
  8. var CopyWebpackPlugin = require('copy-webpack-plugin'); // 拷贝文件
  9. var BomPlugin = require('webpack-utf8-bom');//将文件转成utf-8 bom格式,解决中文乱码的问题
  10. var autoprefixer = require('autoprefixer')
  11. var cssparams = JSON.stringify({ discardComments: { removeAll: false } });
  12.  
  13. var htmlMinifyOptions = require('./htmlminify.config.js'); //htmlminify的配置参数
  14.  
  15. //定义了一些文件夹的路径
  16. var ROOT_PATH = path.resolve(__dirname);
  17. var HTML_ROOT_PATH = path.resolve(__dirname, "html");
  18. var HTML_SRC_PATH = path.resolve(ROOT_PATH, 'dev');
  19. var HTML_DIST_PATH = path.resolve(ROOT_PATH, 'dist');
  20.  
  21. // process.argv 获取命令行使用的参数
  22. // 判断是否带production参数,production会压缩js
  23. var isprod = false;
  24. for (var i in process.argv) {
  25. if (process.argv[i] === "-p" || process.argv[i] === "--production") {
  26. isprod = true;
  27. break;
  28. }
  29. }
  30.  
  31. var config = {
  32. entry: {
  33. index: path.resolve(HTML_SRC_PATH, 'index.js'),
  34. vendors: ['jquery'],
  35. },
  36. output: {
  37. //context: path.resolve(__dirname, 'scripts'),
  38. path: path.resolve(HTML_DIST_PATH, "assets"),
  39. publicPath: '/dist/assets/',//当生成的资源文件和站点不在同一地方时需要配置改地址 e.g.:站点在src,资源生成到/src/static/dist,那么publicPath="/static/dist"
  40. filename: "[name].[hash:6].js",
  41. chunkFilename: "[id].chunk.js",
  42. },
  43. plugins: [
  44. new ExtractTextPlugin("styles/[name].[contenthash:6].css", { allChunks: false /*是否将分散的css文件合并成一个文件*/ }),
  45. new CommonsChunkPlugin('vendors', 'vendors.[hash:6].js'),
  46. new CleanWebpackPlugin(['dist', 'build'], {
  47. root: ROOT_PATH,
  48. verbose: true,
  49. dry: false,
  50. //exclude: ["dist/1.chunk.js"]
  51. }),
  52. //new webpack.optimize.UglifyJsPlugin({
  53. // beautify: true,
  54. // compress: { warnings: false, },
  55. // output: { comments: true }
  56. //}),
  57. //new BomPlugin(true, /\.(cshtml)$/),//解决cshtml中文乱码的问题
  58. ],
  59. module: {
  60. // 解决动态js url警告错误
  61. unknownContextRegExp: /$^/,
  62. unknownContextCritical: false,
  63.  
  64. // require(expr)
  65. exprContextRegExp: /$^/,
  66. exprContextCritical: false,
  67.  
  68. // require("prefix" + expr + "surfix")
  69. wrappedContextRegExp: /$^/,
  70. wrappedContextCritical: false,
  71. // end
  72. loaders: [
  73. { test: require.resolve('jquery'), loader: 'expose?$!expose?jQuery' },// 将jQuery暴露到全局变量中
  74. {
  75. test: /\.css$/,
  76. loader: ExtractTextPlugin.extract(["css-loader", "postcss-loader"]) //同时使用style-loader和postcss-loader时会报错,将style-loader移除
  77. },
  78. { test: /\.(woff|woff2|eot|ttf|svg)(\?[a-z0-9]+)?$/, loader: 'url-loader?limit=1000&name=styles/fonts/[name].[hash:6].[ext]' }, // 处理图片url
  79. { test: /\.(png|jpg|gif)(\?[a-z0-9]+)?$/, loader: 'url-loader?limit=1000&name=styles/images/[name].[hash:8].[ext]' }, // 处理图片url limit=1000 小于1kb则生成base64
  80. //{ test: /\.css$/, loaders: ['style-loader', 'css-loader', 'postcss-loader'] },
  81. {
  82. test: /\.js$/,
  83. exclude: /(node_modules|bower_components)/,
  84. loader: 'babel', // 'babel-loader' is also a valid name to reference
  85. query: {
  86. presets: ['es2015']
  87. }
  88. },
  89. { test: /\.tpl/, loader: 'art-template-loader' },
  90. ]
  91. },
  92. postcss: [autoprefixer()],
  93. resolve: {
  94. alias: {
  95. "datepicker": "jquery-ui/ui/widgets/datepicker",
  96. }
  97. }
  98. };
  99. // 遍历所有.html文件,使用HtmlWebpackPlugin将资源文件引入html中
  100. var htmlfiles = fs.readdirSync(HTML_ROOT_PATH);
  101. htmlfiles.forEach(function (item) {
  102. var currentpath = path.join(HTML_ROOT_PATH, item);
  103. //console.log(currentpath);
  104. var extname = path.extname(currentpath);
  105. if (fs.statSync(currentpath).isFile()) {
  106. //console.log("replace", currentpath.replace("\\html\\", "\\dist\\"))
  107. config.plugins.push(new HtmlWebpackPlugin({
  108. title: '',
  109. template: currentpath,
  110. filename: currentpath.replace("\\html\\", "\\dist\\"),
  111. minify: isprod ? htmlMinifyOptions : false, // 生产模式下压缩html文件
  112. //chunks: ['index', 'vendors'], // 配置该html文件要添加的模块
  113. inject: 'body'
  114. }))
  115. }
  116. });
  117.  
  118. module.exports = config;

webpack踩过的坑(总结)的更多相关文章

  1. vue、gulp、webpack踩过的坑和笔记

    1.监听流错误 stream-combiner2 2.热更新Browsersync与element冲突,换成gulp-connect 3.gulp-uglify压缩js不能压缩es6 4.使用vue- ...

  2. 开始更新webpack踩坑笔记

    今天开始学习webpack,记录下踩过的坑-zxf

  3. [坑况]——webpack搭建前端环境踩过的坑啊

    前言 嘿哈,webpack搭建前端环境踩过的坑啊! 第一个:完全不知所措 webpack4 下面用不了HtmlWebpackPlugin 和 ExtractTextPlugin 解决方案: html- ...

  4. 使用vue开发项目需要注意的问题和可能踩到的坑

    最近,在公司给一些刚刚使用vue进行开发的同学做了一次分享, 其中包括一些vue开发中需要注意的点, 以及一些可能会踩到的坑.具体内容如下: 一.生命钩子使用需要注意的地方 1.beforeCreat ...

  5. 项目中踩过的坑之-sessionStorage

    总想写点什么,却不知道从何写起,那就从项目中踩过的坑开始吧,希望能给可能碰到相同问题的小伙伴一点帮助. 项目情景: 有一个id,要求通过当前网页打开一个新页面(不是当前页面),并把id传给打开的新页面 ...

  6. web开发实战--弹出式富文本编辑器的实现思路和踩过的坑

    前言: 和弟弟合作, 一起整了个智慧屋的小web站点, 里面包含了很多经典的智力和推理题. 其实该站点从技术层面来分析的话, 也算一个信息发布站点. 因此在该网站的后台运营中, 富文本的编辑器显得尤为 ...

  7. "开发路上踩过的坑要一个个填起来————持续更新······(7月30日)"

    欢迎转载,请注明出处! https://gii16.github.io/learnmore/2016/07/29/problem.html 踩过的坑及解决方案记录在此篇博文中! 个人理解,如有偏颇,欢 ...

  8. 【转载】Fragment 全解析(1):那些年踩过的坑

    http://www.jianshu.com/p/d9143a92ad94 Fragment系列文章:1.Fragment全解析系列(一):那些年踩过的坑2.Fragment全解析系列(二):正确的使 ...

  9. Redis Cluster踩过的坑

    Redis Cluster踩过的坑请参考如下链接:http://www.iteye.com/blogs/subjects/Redis_Cluster_Devops

随机推荐

  1. 什么是SQL注入式攻击和如何防范?

    什么是SQL注入式攻击? 所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令.在某些表单中,用户输入的内容直接用来构造(或者影响 ...

  2. LeetCode——House Robber

    Description: You are a professional robber planning to rob houses along a street. Each house has a c ...

  3. Python 如何引入自定义模块

    Python 中如何引用自己创建的源文件(*.py)呢? 也就是所谓的模块. 假如,你有一个自定义的源文件,文件名:saySomething.py .里面有个函数,函数名:sayHello.如下图: ...

  4. serializeArray()与serialize()的区别

    serialize()序列化表单元素为字符串,用于 Ajax 请求. serializeArray()序列化表单元素为JSON数据. <script type="text/javasc ...

  5. 超级小的web手势库AlloyFinger

    针对多点触控设备编程的Web手势组件,快速帮助你的web程序增加手势支持,也不用再担心click 300ms的延迟了.拥有两个版本,无依赖的独立版和react版本.除了Dom对象,也可监听Canvas ...

  6. 破谣言——iPhone砍价

    微信朋友圈和QQ空间很多朋友在传一个iPhone砍价免费送的活动.好吧,砍页面下面的那邪恶广告,第一感觉就是假的.但我要给出证明,所以就有了下面的代码.[只需把UID换成自己的就行],当你砍到5分钱的 ...

  7. Xcode里修改工程名、类名、批量修改变量名

    转:http://blog.csdn.net/yuedong56/article/details/13767001 一.修改工程名: 1.点击工程,右键,选择如图选项. 2.右侧如图位置,修改工程名. ...

  8. java定时器学习

    一.这个是利用jdk自带的Thread类的sleep方法实现定时执行任务. package tasker; import java.util.Date; public class tasker01 e ...

  9. java对象转化成String类型

    在java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能.本文将对常用的转换方法进行一个总结.常用的方法有Object#toString(),(String)要转换的对象,St ...

  10. Spring----学习参考博客书单链接

    [References] 1.IOC之基于Java类的配置Bean 2.IOC之基于注解的配置bean(上) 3.Spring之IOC的注入方式总结 4.Spring之IOC自动装配解析 5.Spri ...