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 相关文章推荐
漂亮的widgets,支持换肤和后期开发新皮肤
Apr 23 Javascript
json简单介绍
Jun 10 Javascript
IE php关于强制下载文件的代码
Aug 23 Javascript
JSON 客户端和服务器端的格式转换
Aug 27 Javascript
javascript函数中的arguments参数
Aug 01 Javascript
js解析json读取List中的实体对象示例
Mar 11 Javascript
jquery validate和jquery form 插件组合实现验证表单后AJAX提交
Aug 26 Javascript
详解如何使用PM2将Node.js的集群变得更加容易
Nov 15 Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
Jan 27 Javascript
微信小程序官方动态自定义底部tabBar的例子
Sep 04 Javascript
微信小程序录音实现功能并上传(使用node解析接收)
Feb 26 Javascript
JS删除对象中某一属性案例详解
Sep 08 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
编写Smarty插件在模板中直接加载数据的详细介绍
2013/06/26 PHP
php rsa加密解密使用详解
2015/01/14 PHP
十个PHP高级应用技巧果断收藏
2015/09/25 PHP
PHP中rename()函数的妙用讲解
2019/02/28 PHP
JavaScript事件列表解说
2006/12/22 Javascript
javascript实现 在光标处插入指定内容
2007/05/25 Javascript
javascript 去字符串空格终极版(支持utf8)
2009/11/14 Javascript
JavaScript将Table导出到Excel实现思路及代码
2013/03/13 Javascript
原生javascript图片自动或手动切换示例附演示源码
2013/09/04 Javascript
详细解密jsonp跨域请求
2015/04/15 Javascript
Bootstrap3 Grid system原理及应用详解
2016/09/30 Javascript
JS函数修改html的元素内容,及修改属性内容的方法
2016/10/28 Javascript
javascript实现二叉树遍历的代码
2017/06/08 Javascript
vue v-model实现自定义样式多选与单选功能
2018/07/05 Javascript
vue实现拖拽的简单案例 不超出可视区域
2019/07/25 Javascript
浅谈Three.js截图并下载的大坑
2019/11/01 Javascript
python getopt 参数处理小示例
2009/06/09 Python
python线程、进程和协程详解
2016/07/19 Python
利用python批量修改word文件名的方法示例
2017/10/17 Python
Python对列表去重的多种方法(四种方法)
2017/12/05 Python
python实现随机梯度下降(SGD)
2020/03/24 Python
python读取txt文件,去掉空格计算每行长度的方法
2018/12/20 Python
Python Selenium模块安装使用教程详解
2020/07/09 Python
Python生成器传参数及返回值原理解析
2020/07/22 Python
纯css3实现思维导图样式示例
2018/11/01 HTML / CSS
html5新特性与用法大全
2018/09/13 HTML / CSS
详解WebSocket跨域问题解决
2018/08/06 HTML / CSS
Mytheresa中国官网:德国时尚奢侈品商城
2017/08/04 全球购物
个人自我评价和职业目标
2014/01/24 职场文书
2014年行政助理工作总结
2014/11/19 职场文书
2015年全民国防教育日活动总结
2015/03/23 职场文书
教师考核鉴定意见
2015/06/05 职场文书
小学开学典礼新闻稿
2015/07/17 职场文书
九不准学习心得体会
2016/01/23 职场文书
创业计划书之闲置物品置换中心
2019/12/25 职场文书
python的变量和简单数字类型详解
2021/09/15 Python