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 相关文章推荐
JS Excel读取和写入操作(模板操作)实现代码
Apr 11 Javascript
AeroWindow 基于JQuery的弹出窗口插件
Jun 27 Javascript
javascript代码编写需要注意的7个小细节小结
Sep 21 Javascript
jQuery多项选项卡的实现思路附样式及代码
Jun 03 Javascript
基于JS实现简单的样式切换效果代码
Sep 04 Javascript
JS实现简单的tab切换选项卡效果
Sep 21 Javascript
Java中int与integer的区别(基本数据类型与引用数据类型)
Feb 19 Javascript
JavaScript数据结构之二叉树的查找算法示例
Apr 13 Javascript
详解mpvue开发小程序小总结
Jul 25 Javascript
微信小程序实现下滑到底部自动翻页功能
Mar 07 Javascript
javascript设计模式 ? 桥接模式原理与应用实例分析
Apr 13 Javascript
详解JavaScript中的this指向问题
Feb 05 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
PHP表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
2011/08/22 PHP
深入探讨PHP中的内存管理问题
2011/08/31 PHP
php颜色转换函数hex-rgb(将十六进制格式转成十进制格式)
2013/09/23 PHP
如何利用http协议发布博客园博文评论
2015/08/03 PHP
Zend Framework分页类用法详解
2016/03/22 PHP
php5.3后静态绑定用法详解
2016/11/11 PHP
php strftime函数获取日期时间(switch用法)
2018/05/16 PHP
javascript判断单选框或复选框是否选中方法集锦
2007/04/04 Javascript
jquery $.ajax()取xml数据的小问题解决方法
2010/11/20 Javascript
Jquery Ajax请求代码(2)
2011/01/07 Javascript
用循环或if语句从json中取数据示例
2014/08/18 Javascript
js实现宇宙星空背景效果的方法
2015/03/03 Javascript
javascript实现在指定元素中垂直水平居中
2015/09/13 Javascript
jQuery检测滚动条是否到达底部
2015/12/15 Javascript
JS实现重新加载当前页面
2016/11/29 Javascript
JS常用倒计时代码实例总结
2017/02/07 Javascript
JS常见算法详解
2017/02/28 Javascript
使用bootstrap插件实现模态框效果
2017/05/10 Javascript
javascript数组定义的几种方法
2017/10/06 Javascript
AngularJS 实现购物车全选反选功能
2017/10/24 Javascript
js中时间格式化的几种方法
2018/07/22 Javascript
小程序云开发部署攻略(图文教程)
2018/10/30 Javascript
手写Vue2.0 数据劫持的示例
2021/03/04 Vue.js
[02:01]2018完美盛典-开场舞《双子星》
2018/12/16 DOTA
钉钉群自定义机器人消息Python封装的实例
2019/02/20 Python
Python使用到第三方库PyMuPDF图片与pdf相互转换
2019/05/03 Python
对pyqt5之menu和action的使用详解
2019/06/20 Python
Python命名空间及作用域原理实例解析
2020/08/12 Python
Python Sqlalchemy如何实现select for update
2020/10/12 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
2021/02/25 Python
欧洲最大的婴幼儿服装及内衣公司:Petit Bateau(小帆船)
2016/08/16 全球购物
String是最基本的数据类型吗?
2013/06/13 面试题
公司市场专员岗位职责
2014/06/29 职场文书
2014年乡镇纪委工作总结
2014/12/19 职场文书
创业计划书之物流运送
2019/09/17 职场文书
python的netCDF4批量处理NC格式文件的操作方法
2022/03/21 Python