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 相关文章推荐
JavaScript实现在页面间传值的方法
Apr 07 Javascript
无刷新上传文件并返回自定义值
Jun 11 Javascript
JavaScript动态设置div的样式的方法
Dec 26 Javascript
js 获取元素所有兄弟节点的实现方法
Sep 06 Javascript
原生JS实现首页进度加载动画
Sep 14 Javascript
ES6新特性之数组、Math和扩展操作符用法示例
Apr 01 Javascript
AngularJS实现自定义指令及指令配置项的方法
Nov 20 Javascript
详解如何用webpack4从零开始构建react开发环境
Jan 27 Javascript
Vue起步(无cli)的啊教程详解
Apr 11 Javascript
js form表单input框限制20个字符,10个汉字代码实例
Apr 12 Javascript
原生js实现trigger方法示例代码
May 22 Javascript
js实现登录拖拽窗口
Feb 10 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
smarty 原来也不过如此~~呵呵
2006/11/25 PHP
PHP 基本语法格式
2009/12/15 PHP
php使用sql数据库 获取字段问题介绍
2013/08/12 PHP
php 判断服务器操作系统的类型
2014/02/17 PHP
PHP mysql事务问题实例分析
2016/01/18 PHP
PHP创建word文档的方法(平台无关)
2016/03/29 PHP
Javascript WebSocket使用实例介绍(简明入门教程)
2014/04/16 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/07/18 Javascript
JavaScript的jQuery库中ready方法的学习教程
2015/08/14 Javascript
JavaScript简介_动力节点Java学院整理
2017/06/26 Javascript
JavaScript中in和hasOwnProperty区别详解
2017/08/04 Javascript
webpack中使用iconfont字体图标的方法
2018/02/22 Javascript
React native ListView 增加顶部下拉刷新和底下点击刷新示例
2018/04/27 Javascript
详解微信小程序支付流程与梳理
2019/07/16 Javascript
[01:48:04]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第一场 2月7日
2021/03/11 DOTA
探索Python3.4中新引入的asyncio模块
2015/04/08 Python
举例区分Python中的浅复制与深复制
2015/07/02 Python
使用Python脚本和ADB命令实现卸载App
2017/02/10 Python
python中利用zfill方法自动给数字前面补0
2018/04/10 Python
python绘制圆柱体的方法
2018/07/02 Python
Python内置random模块生成随机数的方法
2019/05/31 Python
python格式化输出保留2位小数的实现方法
2019/07/02 Python
详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图)
2019/08/06 Python
使用 CSS3 中@media 实现网页自适应的示例代码
2020/03/24 HTML / CSS
加拿大便宜的隐形眼镜商店:Clearly
2016/09/15 全球购物
佳能英国官方网站:Canon UK
2017/08/08 全球购物
养殖行业的创业计划书
2014/01/05 职场文书
12岁生日感言
2014/01/21 职场文书
电子商务专业应届生求职信
2014/05/28 职场文书
先进工作者推荐材料
2014/12/23 职场文书
2016年安全月活动总结
2016/04/06 职场文书
2019个人工作态度自我评价
2019/04/24 职场文书
七年级之开学家长寄语35句
2019/09/05 职场文书
Pytorch 如何实现LSTM时间序列预测
2021/05/17 Python
MySQL RC事务隔离的实现
2022/03/31 MySQL
MySQL 数据表操作
2022/05/04 MySQL