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 相关文章推荐
来自qq的javascript面试题
Jul 24 Javascript
js setTimeout()函数介绍及应用以倒计时为例
Dec 12 Javascript
js过滤特殊字符输入适合输入、粘贴、拖拽多种情况
Mar 22 Javascript
js和jquery设置disabled属性为true使按钮失效
Aug 07 Javascript
jQuery带箭头提示框tooltips插件集锦
Nov 17 Javascript
基于jQuery创建鼠标悬停效果的方法
Mar 07 Javascript
IE9+已经不对document.createElement向下兼容的解决方法
Sep 14 Javascript
jQuery学习笔记之Ajax用法实例详解
Dec 01 Javascript
javaScript实现复选框全选反选事件详解
Nov 20 Javascript
AngularJS创建一个上传照片的指令实例代码
Feb 24 Javascript
使用vue2实现购物车和地址选配功能
Mar 29 Javascript
vue 路由缓存 路由嵌套 路由守卫 监听物理返回操作
Aug 06 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
全国FM电台频率大全 - 18 湖南省
2020/03/11 无线电
PHP仿博客园 个人博客(2) 数据库增添改删
2013/07/05 PHP
PHP获取mysql数据表的字段名称和详细信息的方法
2014/09/27 PHP
Discuz不使用插件实现简单的打赏功能
2019/03/21 PHP
在网页中屏蔽快捷键
2006/09/06 Javascript
js Math 对象的方法
2013/09/01 Javascript
Bootstrap每天必学之级联下拉菜单
2016/03/27 Javascript
javascript中JSON.parse()与eval()解析json的区别
2016/05/19 Javascript
AngularJS 与Bootstrap实现表格分页实例代码
2016/10/14 Javascript
JavaScript模板引擎Template.js使用详解
2016/12/15 Javascript
jquery+html仿翻页相册功能
2016/12/20 Javascript
canvas实现绘制吃豆鱼效果
2017/01/12 Javascript
easyui-datagrid开发实践(总结)
2017/08/02 Javascript
vue 录制视频并压缩视频文件的方法
2018/07/27 Javascript
Vue中的循环及修改差值表达式的方法
2019/08/29 Javascript
基于JavaScript 实现拖放功能
2019/09/12 Javascript
python动态监控日志内容的示例
2014/02/16 Python
python分析网页上所有超链接的方法
2015/05/08 Python
浅谈用VSCode写python的正确姿势
2017/12/16 Python
Python Series从0开始索引的方法
2018/11/06 Python
pandas读取csv文件,分隔符参数sep的实例
2018/12/12 Python
为什么你还不懂得怎么使用Python协程
2019/05/13 Python
Python 200行代码实现一个滑动验证码过程详解
2019/07/11 Python
Python Numpy 控制台完全输出ndarray的实现
2020/02/19 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
2020/06/23 Python
Jmeter HTTPS接口测试证书导入过程图解
2020/07/22 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
2020/11/18 Python
Canvas在超级玛丽游戏中的应用详解
2021/02/06 HTML / CSS
英国家喻户晓的折扣商场:TK Maxx
2017/05/26 全球购物
Book Depository亚太地区:一家领先的国际图书零售商
2019/05/05 全球购物
能源工程专业应届生求职信
2014/03/01 职场文书
校园公益广告语
2014/03/13 职场文书
中学清明节活动总结
2014/07/04 职场文书
青年岗位能手事迹材料
2014/12/23 职场文书
2015年学校远程教育工作总结
2015/07/20 职场文书
在js中修改html body的样式
2021/11/11 Javascript