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控制Div层透明属性由浅变深由深变浅逐渐显示
Nov 12 Javascript
javascript对话框使用方法(警告框 javascript确认框 提示框)
Jan 07 Javascript
node.js中的querystring.unescape方法使用说明
Dec 10 Javascript
Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效
Mar 06 Javascript
jQuery使用模式窗口实现在主页面和子页面中互相传值的方法
Mar 01 Javascript
微信js-sdk分享功能接口常用逻辑封装示例
Oct 13 Javascript
JS实现的图片预览插件与用法示例【不上传图片】
Nov 25 Javascript
vue中子组件调用兄弟组件方法
Jul 06 Javascript
详解js的视频和音频采集
Aug 09 Javascript
JavaScrip数组去重操作实例小结
Jun 20 Javascript
如何实现iframe父子传参通信
Feb 05 Javascript
vue离开当前页面触发的函数代码
Sep 01 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下正则来匹配dede模板标签的代码
2010/08/21 PHP
php下通过IP获取地理位置的代码(小偷程序)
2011/06/09 PHP
php开发文档 会员收费1期
2012/08/14 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
用javascript获取textarea中的光标位置
2008/05/06 Javascript
JS过滤url参数特殊字符的实现方法
2013/12/24 Javascript
JS中的构造函数详细解析
2014/03/10 Javascript
Javascript学习指南
2014/12/01 Javascript
js的window.showModalDialog及window.open用法实例分析
2015/01/29 Javascript
js与jquery实时监听输入框值的oninput与onpropertychange方法
2015/02/05 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
深入理解vue $refs的基本用法
2017/07/13 Javascript
Bootstrap Table快速完美搭建后台管理系统
2017/09/20 Javascript
VSCode 配置React Native开发环境的方法
2017/12/27 Javascript
小程序云开发初探(小结)
2018/10/24 Javascript
[03:24][TI9纪实] Dota奶爸
2019/08/22 DOTA
[01:04:31]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第二场 1月8日
2021/03/11 DOTA
python追加元素到列表的方法
2015/07/28 Python
python迭代dict的key和value的方法
2018/07/06 Python
Scrapy使用的基本流程与实例讲解
2018/10/21 Python
PyTorch加载预训练模型实例(pretrained)
2020/01/17 Python
Python count函数使用方法实例解析
2020/03/23 Python
HTC VIVE美国官网:VR虚拟现实眼镜
2018/02/13 全球购物
易程科技软件测试笔试
2013/03/24 面试题
如何查看在weblogic中已经发布的EJB
2012/06/01 面试题
普罗米修斯教学反思
2014/02/06 职场文书
国培远程培训感言
2014/03/08 职场文书
伊索寓言教学反思
2014/05/01 职场文书
安全教育演讲稿
2014/05/09 职场文书
环保倡议书100字
2014/05/15 职场文书
监察建议书格式
2014/05/19 职场文书
大学生党员承诺书
2014/05/20 职场文书
高速铁道技术专业求职信
2014/08/09 职场文书
jdbc使用PreparedStatement批量插入数据的方法
2021/04/27 MySQL
Python利用Turtle绘制哆啦A梦和小猪佩奇
2022/04/04 Python
《仙剑客栈2》第一弹正式宣传片公开 年内发售
2022/04/07 其他游戏