js: webpack插件的使用

简介: js: webpack插件的使用

执行webpack

$ npx webpack

一、js压缩插件UglifyJsPlugin

https://www.npmjs.com/package/uglifyjs-webpack-plugin


依赖 package.json


{
  "devDependencies": {
    "uglifyjs-webpack-plugin": "^2.2.0",
    "webpack": "^5.31.2",
    "webpack-cli": "^4.6.0"
  }
}

用于测试的js


./src/index.js

// 输出字符串
function hello() {
  console.log("hello");
}
hello();
// 加法运算
function addNumber(a, b) {
  return a + b;
}
console.log(addNumber(1, 2));
console.log(addNumber(1, 3));

1、直接输出js


./dist/main.js


(()=>{function o(o,l){return o+l}console.log("hello"),console.log(o(1,2)),console.log(o(1,3))})();

2、使用插件UglifyJsPlugin 对 js文件进行压缩


webpack.config.js


const UglifyJsPlugin = require("uglifyjs-webpack-plugin");
module.exports = {
  // 默认值
  // entry: './src/index.js',
  // output: './dist/main.js',
  optimization: {
    minimizer: [new UglifyJsPlugin()],
  },
  mode: "production", // 'development' or 'production'
};

输出结果:


./dist/main.js


console.log("hello"),console.log(3),console.log(4);

二、css提取插件:MiniCssExtractPlugin

https://www.npmjs.com/package/mini-css-extract-plugin


依赖 package.json


{
  "devDependencies": {
    "css-loader": "^5.2.1",
    "mini-css-extract-plugin": "^1.4.1",
    "webpack": "^5.31.2",
    "webpack-cli": "^4.6.0"
  }
}

./src/style-1.css


body {
  background: blue;
}

./src/style-2.css


body {
  background: blue;
}

./src/index.js


import './style-1.css';
import './style-2.css';

webpack默认不处理css文件,使用css-loader处理


webpack.config.js

module.exports = {
  // 默认值
  // entry: './src/index.js',
  // output: './dist/main.js',
  module: {
    rules: [
      {
        test: /\.css$/i,
        use: ["css-loader"],
      },
    ],
  },
  mode: "production", // 'development' or 'production'
};

输出如下


(() => {
  "use strict";
  var n = {
      634: (n, r, t) => {
        var o = t(587);
        t.n(o)()(function (n) {
          return n[1];
        }).push([n.id, "body {\n  background: blue;\n}\n", ""]);
      },
      358: (n, r, t) => {
        var o = t(587);
        t.n(o)()(function (n) {
          return n[1];
        }).push([n.id, "body {\n  background: green;\n}\n", ""]);
      },
      587: (n) => {
        n.exports = function (n) {
          var r = [];
          return (
            (r.toString = function () {
              return this.map(function (r) {
                var t = n(r);
                return r[2] ? "@media ".concat(r[2], " {").concat(t, "}") : t;
              }).join("");
            }),
            (r.i = function (n, t, o) {
              "string" == typeof n && (n = [[null, n, ""]]);
              var e = {};
              if (o)
                for (var a = 0; a < this.length; a++) {
                  var u = this[a][0];
                  null != u && (e[u] = !0);
                }
              for (var i = 0; i < n.length; i++) {
                var c = [].concat(n[i]);
                (o && e[c[0]]) ||
                  (t &&
                    (c[2]
                      ? (c[2] = "".concat(t, " and ").concat(c[2]))
                      : (c[2] = t)),
                  r.push(c));
              }
            }),
            r
          );
        };
      },
    },
    r = {};
  function t(o) {
    var e = r[o];
    if (void 0 !== e) return e.exports;
    var a = (r[o] = { id: o, exports: {} });
    return n[o](a, a.exports, t), a.exports;
  }
  (t.n = (n) => {
    var r = n && n.__esModule ? () => n.default : () => n;
    return t.d(r, { a: r }), r;
  }),
    (t.d = (n, r) => {
      for (var o in r)
        t.o(r, o) &&
          !t.o(n, o) &&
          Object.defineProperty(n, o, { enumerable: !0, get: r[o] });
    }),
    (t.o = (n, r) => Object.prototype.hasOwnProperty.call(n, r)),
    t(634),
    t(358);
})();

使用插件 MiniCssExtractPlugin 将css单独抽离出来


const MiniCssExtractPlugin = require("mini-css-extract-plugin");
module.exports = {
  // 默认值
  // entry: './src/index.js',
  // output: './dist/main.js',
  plugins: [new MiniCssExtractPlugin()],
  module: {
    rules: [
      {
        test: /\.css$/i,
        use: [MiniCssExtractPlugin.loader, "css-loader"],
      },
    ],
  },
  mode: "production", // 'development' or 'production'
};

输出了一个新的css文件


./dist/main.css


body {
  background: blue;
}
body {
  background: green;
}

三、 生成html插件 HtmlWebpackPlugin

https://www.npmjs.com/package/html-webpack-plugin


依赖 package.json


{
  "devDependencies": {
    "html-webpack-plugin": "^5.3.1",
    "webpack": "^5.31.2",
    "webpack-cli": "^4.6.0"
  }
}

webpack.config.js


const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
  plugins: [
    new HtmlWebpackPlugin()
  ]
}

四、使用开发服务器 devServer

依赖 package.json


{
  "devDependencies": {
    "webpack": "^5.31.2",
    "webpack-cli": "^4.6.0",
    "webpack-dev-server": "^3.11.2"
  }
}

实现自动热更新


const path = require('path');
module.exports = {
  // 默认值
  // entry: './src/index.js',
  // output: './dist/main.js',
  devServer: {
    contentBase: path.join(__dirname, 'dist'),
    port: 9000,
    hot: true,
    open: true,
  },
  mode: "development", // 'development' or 'production'
};

启动

$ npx webpack serve
相关文章
|
2月前
|
编解码 JavaScript 前端开发
JS逆向浏览器脱环境专题:事件学习和编写、DOM和BOM结构、指纹验证排查、代理自吐环境通杀环境检测、脱环境框架、脱环境插件解决
JS逆向浏览器脱环境专题:事件学习和编写、DOM和BOM结构、指纹验证排查、代理自吐环境通杀环境检测、脱环境框架、脱环境插件解决
58 1
|
2月前
|
前端开发 JavaScript 开发者
Angular与Webpack协同优化:打造生产级别的打包配置——详解从基础设置到高级代码拆分和插件使用
【8月更文挑战第31天】在现代前端开发中,优化应用性能和加载时间至关重要,尤其是对于使用Angular框架的项目。本文通过代码示例详细展示了如何配置Webpack,以实现生产级别的打包优化。从基础配置到生产环境设置、代码拆分,再到使用加载器与插件,每个步骤都旨在提升应用效率,确保快速加载和稳定运行。通过这些配置,开发者能更好地控制资源打包,充分发挥Webpack的强大功能。
38 0
|
2月前
|
JavaScript 前端开发 API
解锁前端开发新境界:Vue.js携手Webpack,打造高效构建流程,你的项目值得拥有!
【8月更文挑战第30天】随着前端技术的发展,模块化与组件化趋势愈发显著。Vue.js 以其简洁的 API 和灵活的组件系统,深受开发者喜爱;Webpack 则凭借强大的模块打包能力成为前端工程化的基石。两者结合,不仅简化了组件编写与引用,还通过模块热替换、代码分割等功能大幅提升开发效率。本文将通过具体示例,展示如何利用 Vue.js 和 Webpack 构建高效、有序的前端开发环境。从安装配置到实际应用,逐步解析这一组合的优势所在。
37 0
|
2月前
|
JavaScript 前端开发 测试技术
[译] 用 Vue.js 3 Composition API 创建 i18n 插件
[译] 用 Vue.js 3 Composition API 创建 i18n 插件
|
3月前
|
JavaScript Windows
安装node.js与webpack创建vue2项目
安装node.js与webpack创建vue2项目
25 1
|
2月前
|
前端开发 开发者
在前端开发中,webpack 作为模块打包工具,其 DefinePlugin 插件可在编译时动态定义全局变量,支持环境变量定义、配置参数动态化及条件编译等功能。
在前端开发中,webpack 作为模块打包工具,其 DefinePlugin 插件可在编译时动态定义全局变量,支持环境变量定义、配置参数动态化及条件编译等功能。本文阐述 DefinePlugin 的原理、用法及案例,包括安装配置、具体示例(如动态加载资源、配置接口地址)和注意事项,帮助开发者更好地利用此插件优化项目。
54 0
|
3月前
|
JavaScript 前端开发 API
Chrome插件实现问题之 content_script.js能做什么
Chrome插件实现问题之 content_script.js能做什么
|
3月前
|
JavaScript
js好用的动态分页插件
js好用的动态分页插件是一款简单的分页样式插件,支持样式类型,当前页,每页显示数量,按钮数量,总条数,上一页文字,下一页文字,输入框跳转等功能。
34 1
|
3月前
|
JavaScript
vue 农历日期转公历日期(含插件 js-calendar-converter 使用教程)
vue 农历日期转公历日期(含插件 js-calendar-converter 使用教程)
182 0
|
JavaScript 前端开发
Bootstrap3.0学习第十八轮(JavaScript插件——下拉菜单)
详情请查看 http://aehyok.com/Blog/Detail/25.html   个人网站地址:aehyok.com QQ 技术群号:206058845,验证码为:aehyok 本文文章链接:http://www.cnblogs.com/aehyok/p/3981965.html 感谢您的阅读,如果您对我的博客所讲述的内容有兴趣,那不妨点个推荐吧,谢谢支持:-O。
744 0
下一篇
无影云桌面