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 相关文章推荐
JavaScript 乱码问题
Aug 06 Javascript
jQuery.clean使用方法及思路分析
Jan 07 Javascript
在Firefox下js select标签点击无法弹出
Mar 06 Javascript
JavaScript判断textarea值是否为空并给出相应提示
Sep 04 Javascript
JS的框架Polymer中的dom-if和is属性使用说明
Jul 29 Javascript
JavaScript实现cookie的写入、读取、删除功能
Nov 05 Javascript
基于JS实现PHP的sprintf函数实例
Nov 14 Javascript
Angular的$http的ajax的请求操作(推荐)
Jan 10 Javascript
webpack使用 babel-loader 转换 ES6代码示例
Aug 21 Javascript
基于ionic实现下拉刷新功能
May 10 Javascript
vue中设置height:100%无效的问题及解决方法
Jul 27 Javascript
js实现复制粘贴的两种方法
Dec 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
通过ICQ网关发送手机短信的PHP源程序
2006/10/09 PHP
对淘宝URL中ID提取的PHP代码
2013/09/01 PHP
php可生成缩略图的文件上传类实例
2014/12/17 PHP
简要剖析PHP的Yii框架的组件化机制的基本知识
2016/03/17 PHP
CI分页类首页、尾页不显示的解决方法
2016/03/28 PHP
深入理解 PHP7 中全新的 zval 容器和引用计数机制
2018/10/15 PHP
火狐浏览器(firefox)下获得Event对象以及keyCode
2008/11/13 Javascript
google地图的路线实现代码
2009/08/20 Javascript
计算新浪Weibo消息长度(还可以输入119字)
2013/07/02 Javascript
javascript中callee与caller的区别分析
2015/04/20 Javascript
JavaScript中的getMilliseconds()方法使用详解
2015/06/10 Javascript
jQuery实现内容定时切换效果完整实例
2016/04/06 Javascript
详解jQuery中的DOM操作
2016/12/23 Javascript
详解vue.js的devtools安装
2017/05/26 Javascript
jQuery Collapse1.1.0折叠插件简单使用
2017/08/28 jQuery
微信小程序--获取用户地理位置名称(无须用户授权)的方法
2019/04/29 Javascript
vue2之简易的pc端短信验证码的问题及处理方法
2019/06/03 Javascript
[03:27]《辉夜杯》线下训练营 导师CU和海涛指点迷津
2015/10/23 DOTA
[03:59]第二届DOTA2亚洲邀请赛选手传记-VGJ.rOtk
2017/04/03 DOTA
Flask入门教程实例:搭建一个静态博客
2015/03/27 Python
在Python的Django框架中编写编译函数
2015/07/20 Python
详解Python Matplot中文显示完美解决方案
2019/03/07 Python
python实现AES和RSA加解密的方法
2019/03/28 Python
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
2019/06/13 Python
使用Python中的reduce()函数求积的实例
2019/06/28 Python
Python类中self参数用法详解
2020/02/13 Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
2020/04/20 Python
python 写一个水果忍者游戏
2021/01/13 Python
Omio美国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/08 全球购物
美国首屈一指的高品质珠宝设计师和零售商:Allurez
2018/01/23 全球购物
墨尔本最受欢迎的复古风格品牌:Princess Highway
2018/12/21 全球购物
机关干部三严三实心得体会
2014/10/13 职场文书
对党的十八届四中全会的期盼
2014/10/17 职场文书
公司保洁员岗位职责
2015/02/13 职场文书
大学新生入学感想
2015/08/07 职场文书
Python中的datetime包与time包包和模块详情
2022/02/28 Python