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 相关文章推荐
用jquery实现下拉菜单效果的代码
Jul 25 Javascript
Function.prototype.call.apply结合用法分析示例
Jul 03 Javascript
jquery根据锚点offset值实现动画切换
Sep 11 Javascript
javascript实用方法总结
Feb 06 Javascript
js如何改变文章的字体大小
Jan 08 Javascript
BOM系列第一篇之定时器setTimeout和setInterval
Aug 17 Javascript
Js实现中国公民身份证号码有效性验证实例代码
May 03 Javascript
Vue.js通用应用框架-Nuxt.js的上手教程
Dec 25 Javascript
Node.js 进程平滑离场剖析小结
Jan 24 Javascript
JS实现手写 forEach算法示例
Apr 29 Javascript
谈一谈vue请求数据放在created好还是mounted里好
Jul 27 Javascript
在vue中实现echarts随窗体变化
Jul 27 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
全国FM电台频率大全 - 8 黑龙江省
2020/03/11 无线电
隐性调用php程序的方法
2009/03/09 PHP
php实现mysql同步的实现方法
2009/10/21 PHP
PHP延迟静态绑定示例分享
2014/06/22 PHP
php读取flash文件高宽帧数背景颜色的方法
2015/01/06 PHP
PHP+shell实现多线程的方法
2015/07/01 PHP
JQuery拖拽元素改变大小尺寸实现代码
2012/12/10 Javascript
jQuery窗口、文档、网页各种高度的精确理解
2014/07/02 Javascript
JQuery右键菜单插件ContextMenu使用指南
2014/12/19 Javascript
简介JavaScript中search()方法的使用
2015/06/06 Javascript
Javascript基于AJAX回调函数传递参数实例分析
2015/12/15 Javascript
返回函数的JavaScript函数
2016/06/14 Javascript
jQuery中deferred对象使用方法详解
2016/07/14 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
2016/12/19 Javascript
JS实现加载时锁定HTML页面元素的方法
2017/06/24 Javascript
纯js实现的积木(div层)拖动功能示例
2017/07/19 Javascript
手把手教你使用vue-cli脚手架(图文解析)
2017/11/08 Javascript
vue获取data数据改变前后的值方法
2019/11/07 Javascript
在Vue中实现随hash改变响应菜单高亮
2020/03/09 Javascript
vue 实现element-ui中的加载中状态
2020/11/11 Javascript
Python Matplotlib库入门指南
2015/05/18 Python
Python2.x版本中maketrans()方法的使用介绍
2015/05/19 Python
python实现学生管理系统
2018/01/11 Python
django的settings中设置中文支持的实现
2019/04/28 Python
Anaconda+vscode+pytorch环境搭建过程详解
2020/05/25 Python
深入分析python 排序
2020/08/24 Python
html如何对span设置宽度
2019/10/30 HTML / CSS
捷克厨房用品购物网站:Tescoma
2018/07/13 全球购物
电影T恤、80年代T恤和80年代服装:TV Store Online
2020/01/05 全球购物
应届毕业生求职信范例分享
2013/12/17 职场文书
区优秀教师事迹材料
2014/02/10 职场文书
《白鹅》教学反思
2014/04/13 职场文书
运输企业安全生产责任书
2014/07/28 职场文书
群众路线对照检查材料
2014/09/22 职场文书
感恩教育主题班会
2015/08/12 职场文书
2015年高中语文教学总结
2015/08/18 职场文书