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 相关文章推荐
js用图作提交按钮或超连接
Mar 26 Javascript
JavaScript 错误处理与调试经验总结
Aug 10 Javascript
JS打开图片另存为对话框实现代码
Dec 26 Javascript
JS 如何获取radio选中后的值及不选择取radio的值
Oct 28 Javascript
js字符串转换成数字与数字转换成字符串的实现方法
Jan 08 Javascript
JavaScript制作淘宝星级评分效果的思路
Jun 23 Javascript
Vue.js动态组件解析
Sep 09 Javascript
JavaScript之Vue.js【入门基础】
Dec 06 Javascript
jQuery菜单实例(全选,反选,取消)
Aug 28 jQuery
jQuery封装animate.css的实例
Jan 04 jQuery
Preload基础使用方法详解
Feb 03 Javascript
vue 动态组件(component :is) 和 dom元素限制(is)用法说明
Sep 04 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
文件上传类
2006/10/09 PHP
Php+SqlServer实现分页显示
2006/10/09 PHP
php实现读取超大文件的方法
2014/07/28 PHP
PHP中字符安全过滤函数使用小结
2015/02/25 PHP
php实现购物车功能(上)
2020/07/23 PHP
取得一定长度的内容,处理中文
2006/12/20 Javascript
js小技巧--自动隐藏红叉叉
2007/08/13 Javascript
动态调用CSS文件的JS代码
2010/07/29 Javascript
Javascript 面向对象编程(coolshell)
2012/03/18 Javascript
简单的Jquery全选功能
2013/11/07 Javascript
js调试系列 断点与动态调试[基础篇]
2014/06/18 Javascript
jQuery中removeClass()方法用法实例
2015/01/05 Javascript
百度UEditor编辑器如何关闭抓取远程图片功能
2015/03/03 Javascript
JS实现控制表格只显示行边框或者只显示列边框的方法
2015/03/31 Javascript
jquery验证邮箱格式并显示提交按钮
2015/11/07 Javascript
js 连续赋值的简单实现
2016/06/13 Javascript
Vue响应式原理详解
2017/04/18 Javascript
Angular4的输入属性与输出属性实例详解
2017/11/29 Javascript
详解Vue中组件传值的多重实现方式
2019/08/16 Javascript
layui 富文本赋值,取值,取纯文本值的实例
2019/09/18 Javascript
bootstrap-paginator服务器端分页使用方法详解
2020/02/13 Javascript
详解JavaScript原型与原型链
2020/11/16 Javascript
python字典操作实例详解
2017/11/16 Python
Django如何实现网站注册用户邮箱验证功能
2019/08/14 Python
什么是python的自省
2020/06/21 Python
浅谈如何使用python抓取网页中的动态数据实现
2020/08/17 Python
python 如何区分return和yield
2020/09/22 Python
python实现暗通道去雾算法的示例
2020/09/27 Python
python快速安装OpenCV的步骤记录
2021/02/22 Python
HTML5触摸事件演化tap事件介绍
2016/03/25 HTML / CSS
美国职棒大联盟官方网上商店:MLBShop.com
2017/11/12 全球购物
Agoda台湾官网:国内外订房2折起
2018/03/20 全球购物
如何处理简单的PHP错误
2015/10/14 面试题
食堂采购员岗位职责
2014/03/17 职场文书
关于有小孩的离婚协议书
2014/10/26 职场文书
2014年财务工作总结范文
2014/11/11 职场文书