webpack打包非模块化js的方法


Posted in Javascript onOctober 24, 2018

本文主要记录了非模块化js如何使用webpack打包

模块化打包实现方式

webpack是模块打包工具,通过入口文件递归遍历其依赖图谱,绝对是打包神器。

bar.js

export default function bar() {
 //
}

foo.js

import bar from './bar';

bar();

通过如下,webpack配置很快实现打包。通过插件我们还可以实现文件压缩,开发态我们还可以配置sourceMap进行代码调试(chrome浏览器支持sourcemap调试)。

module.exports = {
 entry: './foo.js',
 output: {
  filename: 'bundle.js'
 },
 devtool: "source-map", 
  plugins: [
    // compress js
    new webpack.optimize.UglifyJsPlugin({
      sourceMap: true
    })
  ]
}

非模块化文件打包压缩

这里我们可以使用webpack可以配置多入口文件及ExtractTextPlugin 插件将非模块文件压缩到一个文件中。

m1.js

functon a() {
  console.log('m1 file')
}

m2.js

functon b() {
  console.log('m2 file')
}

webpack配置文件

var webpack = require('webpack')
var path = require('path')

module.exports = {
  entry: {
    'app': [
      './src/a.js',
      './src/b.js'
    ]
  },
  output: {
    path: path.resolve(__dirname, "dist"),
    filename: "[name].js"
  }
}

打包后,发现我去不能运行??原因是webpack打包会将每个文件内容放入闭包函数中,我们去调用闭包中的函数,当然不行啦。

/******/ (function(modules) { // webpackBootstrap
/******/  // The module cache
/******/  var installedModules = {};
/******/
/******/  // The require function
/******/  function __webpack_require__(moduleId) {
/******/
/******/    // Check if module is in cache
/******/    if(installedModules[moduleId]) {
/******/      return installedModules[moduleId].exports;
/******/    }
/******/    // Create a new module (and put it into the cache)
/******/    var module = installedModules[moduleId] = {
/******/      i: moduleId,
/******/      l: false,
/******/      exports: {}
/******/    };
/******/
/******/    // Execute the module function
/******/    modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/    // Flag the module as loaded
/******/    module.l = true;
/******/
/******/    // Return the exports of the module
/******/    return module.exports;
/******/  }
/******/
/******/
/******/  // expose the modules object (__webpack_modules__)
/******/  __webpack_require__.m = modules;
/******/
/******/  // expose the module cache
/******/  __webpack_require__.c = installedModules;
/******/
/******/  // define getter function for harmony exports
/******/  __webpack_require__.d = function(exports, name, getter) {
/******/    if(!__webpack_require__.o(exports, name)) {
/******/      Object.defineProperty(exports, name, {
/******/        configurable: false,
/******/        enumerable: true,
/******/        get: getter
/******/      });
/******/    }
/******/  };
/******/
/******/  // getDefaultExport function for compatibility with non-harmony modules
/******/  __webpack_require__.n = function(module) {
/******/    var getter = module && module.__esModule ?
/******/      function getDefault() { return module['default']; } :
/******/      function getModuleExports() { return module; };
/******/    __webpack_require__.d(getter, 'a', getter);
/******/    return getter;
/******/  };
/******/
/******/  // Object.prototype.hasOwnProperty.call
/******/  __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/  // __webpack_public_path__
/******/  __webpack_require__.p = "";
/******/
/******/  // Load entry module and return exports
/******/  return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(1);
module.exports = __webpack_require__(2);


/***/ }),
/* 1 */
/***/ (function(module, exports) {

 

/***/ }),
/* 2 */
/***/ (function(module, exports) {

function b() {
  console.log('b file')
}

/***/ })
/******/ ]);
//# sourceMappingURL=app.js.map

怎么办呢?我们可以对我们当前代码进行修改,让所有函数或属性都能通过window对象调用即可。

(function(Demo) {
  
  Demo.module1 = {
    msg:function() {
      return 'Hello World';
    }

  }
})(window.Demo = window.Demo || {})

所以我们对于上面闭包形式且所有对象都挂在window对象这种类型代码,不会出现函数调用不到现象。通过webpack压缩后一样正常运行

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
wordpress之js库集合研究介绍
Aug 17 Javascript
在JavaScript中,为什么要尽可能使用局部变量?
Apr 06 Javascript
用apply让javascript函数仅执行一次的代码
Jun 27 Javascript
js简单的弹出框有关闭按钮
May 05 Javascript
javascript设置连续两次点击按钮时间间隔的方法
Oct 28 Javascript
javascript实现通过表格绘制颜色填充矩形的方法
Apr 21 Javascript
JS实现弹出下载对话框及常见文件类型的下载
Jul 13 Javascript
angularJs自定义过滤器实现手机号信息隐藏的方法
Oct 08 Javascript
webpack配置proxyTable时pathRewrite无效的解决方法
Dec 13 Javascript
js继承的这6种方式!(上)
Apr 23 Javascript
ES6之Proxy的get方法详解
Oct 11 Javascript
js实现随机点名功能
Dec 23 Javascript
如何实现一个webpack模块解析器
Oct 24 #Javascript
vue项目中使用Svg的方法
Oct 24 #Javascript
js中获取URL参数的共用方法getRequest()方法实例详解
Oct 24 #Javascript
小程序云开发初探(小结)
Oct 24 #Javascript
vue-cli V3.0版本的使用详解
Oct 24 #Javascript
vue+axios 前端实现登录拦截的两种方式(路由拦截、http拦截)
Oct 24 #Javascript
vue 属性拦截实现双向绑定的实例代码
Oct 24 #Javascript
You might like
深入解析PHP内存管理之谁动了我的内存
2013/06/20 PHP
php中explode的负数limit用法分析
2015/02/27 PHP
PHP扩展mcrypt实现的AES加密功能示例
2019/01/29 PHP
判断用户的在线状态 onbeforeunload事件
2011/03/05 Javascript
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
2013/06/29 Javascript
js动态调用css属性的小规律及实例说明
2013/12/28 Javascript
JS组件系列之Bootstrap table表格组件神器【终结篇】
2016/05/10 Javascript
jQuery实现微信长按识别二维码功能
2016/08/26 Javascript
jQuery实现的多张图无缝滚动效果【测试可用】
2016/09/12 Javascript
使用AngularJS2中的指令实现按钮的切换效果
2017/03/27 Javascript
实例讲解javascript实现异步图片上传方法
2017/12/05 Javascript
vue.js 获取select中的value实例
2018/03/01 Javascript
swiper 自动图片无限轮播实现代码
2018/05/21 Javascript
js getBoundingClientRect使用方法详解
2019/07/17 Javascript
JavaScript基于用户照片姓名生成海报
2020/05/29 Javascript
vue $mount 和 el的区别说明
2020/09/11 Javascript
Openlayers+EasyUI Tree动态实现图层控制
2020/09/28 Javascript
Python类定义和类继承详解
2015/05/08 Python
python登录豆瓣并发帖的方法
2015/07/08 Python
python实现自动发送邮件
2018/06/20 Python
基于pycharm导入模块显示不存在的解决方法
2018/10/13 Python
在python中按照特定顺序访问字典的方法详解
2018/12/14 Python
python opencv 图像拼接的实现方法
2019/06/27 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
2019/08/02 Python
Python脚本实现监听服务器的思路代码详解
2020/05/28 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
2020/08/07 Python
浏览器实现移动端高性能css3动画(开启gpu加速)
2013/12/23 HTML / CSS
瑞典香水、须后水和美容产品购物网站:Parfym-Klick.se
2019/12/29 全球购物
一道写SQL的面试题和答案
2013/11/19 面试题
Linux上比较文件的命令都有哪些
2013/09/28 面试题
材料加工工程求职信
2014/02/19 职场文书
纪检干部先进事迹材料
2014/08/23 职场文书
2014院党委领导班子对照检查材料思想汇报
2014/09/24 职场文书
2014年公路养护工作总结
2014/12/04 职场文书
裁员通知
2015/04/25 职场文书
ConstraintValidator类如何实现自定义注解校验前端传参
2021/06/18 Java/Android