webpack 开发和生产并行设置的方法


Posted in Javascript onNovember 08, 2018

安装依赖的4种命令

生产依赖和开发

一个项目中是有开发环境和生产环境的,这两个环境的依赖也是不同的

  • 开发依赖:只在开发中用来帮助你进行开发,简化代码或者生成兼容设置的以来包。你可以打开package.json来查看,devDependencies的下面的这些包为开发使用的包。这些包在生产环境中并没有用处。
  • 生产依赖:就是比如我们的js使用了jquery,jquery的程序要在浏览器端起作用,也就是说我们最终的程序也需要这个包,这就是生产依赖。这些包在dependencies中。

webpack 开发和生产并行设置的方法

npm install jquery

安装完成后,你会发现在package.json中并不存在这个包的依赖。如果你项目拷贝给别人继续开发,或者别人和你git合作,再次下载项目npm install时就会缺少这个jquery包。项目就会无法正常运行,所以这也是我们最不赞成的安装方法

npm install jquery --save

安装完成后,它存在于package.json的dependencies中,也就是说它是生产环境需要依赖的包(上线时需要的以来包)。

npm install jquery --save-dev

安装完成后,它存在于package.json的devDependencies中,也就是说它是开发环境中需要的,上线并不需要这个包的依赖。

npm install

根据package.json安装所有的生产和开发的包

npm install --production

安装生产环境依赖包

配置生产和开发并行

webpack.config.js

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/"
  } 
}

package.json(windows)

"dev":"set type=dev&webpack"

"scripts": {
  "server": "webpack-dev-server --open",
  "dev":"set type=dev&webpack",
  "build": "set type=build&webpack"
 },

package.json(mac)

"scripts": {
  "server": "webpack-dev-server --open",
  "dev":"export type=dev&&webpack",
  "build": "export type=build&&webpack"
 },

开发

npm run dev

webpack 开发和生产并行设置的方法

生产

npm run build

webpack 开发和生产并行设置的方法

全部代码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');
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',
  },
  // 出口
  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 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')),
    })
  ],
  //开发服务
  devServer: {
    contentBase: path.resolve(__dirname, 'dist'),
    host: '192.168.1.9',
    compress: true, //服务端是否启用压缩
    port: 1717
  }
}

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

Javascript 相关文章推荐
jQuery asp.net 用json格式返回自定义对象
Apr 07 Javascript
node.js中的fs.futimesSync方法使用说明
Dec 17 Javascript
JavaScript包装对象使用详解
Jul 09 Javascript
浅谈Javascript中substr和substring的区别
Sep 30 Javascript
JS 实现倒计时数字时钟效果【附实例代码】
Mar 30 Javascript
js实现一键复制功能
Mar 16 Javascript
jquery版轮播图效果和extend扩展
Jul 18 jQuery
Vue+ElementUI实现表单动态渲染、可视化配置的方法
Mar 07 Javascript
JSON数据中存在单个转义字符“\”的处理方法
Jul 11 Javascript
快速了解Node中的Stream流是什么
Feb 13 Javascript
JQuery获取元素尺寸、位置及页面滚动事件应用示例
May 14 jQuery
微信小程序canvas截取任意形状的实现代码
Jan 13 Javascript
JS动画实现回调地狱promise的实例代码详解
Nov 08 #Javascript
深入解析ES6中的promise
Nov 08 #Javascript
vue中promise的使用及异步请求数据的方法
Nov 08 #Javascript
node使用Mongoose类库实现简单的增删改查
Nov 08 #Javascript
webpack4+express+mongodb+vue实现增删改查的示例
Nov 08 #Javascript
Echarts之悬浮框中的数据排序问题
Nov 08 #Javascript
Jquery和CSS实现选择框重置按钮功能
Nov 08 #jQuery
You might like
德生BCL3000的电路分析和打磨
2021/03/02 无线电
一些常用的php函数
2006/12/06 PHP
php文档更新介绍
2011/07/22 PHP
本地机apache配置基于域名的虚拟主机详解
2013/08/10 PHP
ThinkPHP3.2.3数据库设置新特性
2015/03/05 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
jQuery Ajax方法调用 Asp.Net WebService 的详细实例代码
2011/04/27 Javascript
jquery获取div宽度的实现思路与代码
2013/01/13 Javascript
js阻止冒泡及jquery阻止事件冒泡示例介绍
2013/11/19 Javascript
前台js调用后台方法示例
2013/12/02 Javascript
JavaScript时间操作之年月日星期级联操作
2016/01/15 Javascript
js实现获取两个日期之间所有日期的方法
2016/06/17 Javascript
详解AngularJS controller调用factory
2017/05/19 Javascript
vue抽出组件并传值实例
2020/07/31 Javascript
[52:12]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
深入解答关于Python的11道基本面试题
2017/04/01 Python
Python3实现zip分卷压缩过程解析
2019/10/09 Python
python3图片文件批量重命名处理
2019/10/31 Python
python序列化与数据持久化实例详解
2019/12/20 Python
python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例
2020/03/09 Python
利用python在excel中画图的实现方法
2020/03/17 Python
在keras中对单一输入图像进行预测并返回预测结果操作
2020/07/09 Python
Python OpenCV中的numpy与图像类型转换操作
2020/12/11 Python
学会迭代器设计模式,帮你大幅提升python性能
2021/01/03 Python
python线程优先级队列知识点总结
2021/02/28 Python
html5使用canvas画一条线
2014/12/15 HTML / CSS
爱尔兰最大的体育零售商:Life Style Sports
2019/06/12 全球购物
开学典礼决心书
2014/03/11 职场文书
2014年入党积极分子学习三中全会思想汇报
2014/09/13 职场文书
2015年中秋节活动总结
2015/03/23 职场文书
小学生节水倡议书
2015/04/29 职场文书
2015年工程部工作总结
2015/04/30 职场文书
街道办残联2016年助残日活动总结
2016/04/01 职场文书
python 调用js的四种方式
2021/04/11 Python
golang如何去除多余空白字符(含制表符)
2021/04/25 Golang
vue+springboot实现登录验证码
2021/05/27 Vue.js