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 同时在IE和FireFox获取KeyCode的代码
Feb 07 Javascript
JSON相关知识汇总
Jul 03 Javascript
JavaScript中的ajax功能的概念和示例详解
Oct 17 Javascript
Angularjs的Controller间通信机制实例分析
Nov 07 Javascript
jQuery Ajax File Upload实例源码
Dec 12 Javascript
Node连接mysql数据库方法介绍
Feb 07 Javascript
Vue关于数据绑定出错解决办法
May 15 Javascript
详解vue的diff算法原理
May 20 Javascript
React 项目迁移 Webpack Babel7的实现
Sep 12 Javascript
利用Vconsole和Fillder进行移动端抓包调试方法
Mar 05 Javascript
vue使用websocket的方法实例分析
Jun 22 Javascript
vue项目使用$router.go(-1)返回时刷新原来的界面操作
Jul 26 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
MySQL数据库转移,access,sql server 转 MySQL 的图文教程
2007/09/02 PHP
destoon调用企业会员公司形象图片的实现方法
2014/08/21 PHP
PHP操作FTP类 (上传、下载、移动、创建等)
2016/03/31 PHP
php使用正则表达式获取字符串中的URL
2016/12/29 PHP
Thinkphp5.0 框架Model模型简单用法分析
2019/10/11 PHP
javascript动态加载二
2012/08/22 Javascript
jQuery不间断滚动效果(模拟百度新闻支持文字/图片/垂直滚动)
2013/02/05 Javascript
JS在TextArea光标位置插入文字并实现移动光标到文字末尾
2013/06/21 Javascript
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
2013/07/05 Javascript
EasyUI中实现form表单提交的示例分享
2015/03/01 Javascript
jQuery的框架介绍
2016/05/11 Javascript
浅谈JS运算符&&和|| 及其优先级
2016/08/10 Javascript
jQuery下拉菜单的实现代码
2016/11/03 Javascript
纯js实现图片匀速淡入淡出效果
2017/08/22 Javascript
分享5个顶级的JavaScript Ajax组件库
2018/09/16 Javascript
js实现同一个页面,多个enter事件绑定的示例
2018/10/10 Javascript
KOA+egg.js集成kafka消息队列的示例
2018/11/09 Javascript
Vuejs学习笔记之使用指令v-model完成表单的数据双向绑定
2019/04/29 Javascript
JS获取表格视图所选行号的ids过程解析
2020/02/21 Javascript
如何利用javascript接收json信息并进行处理
2020/08/06 Javascript
Vue项目如何引入bootstrap、elementUI、echarts
2020/11/26 Vue.js
[03:08]Ti4观战指南上
2014/07/07 DOTA
python sys模块sys.path使用方法示例
2013/12/04 Python
Python基础教程之浅拷贝和深拷贝实例详解
2017/07/15 Python
python逆向入门教程
2018/01/15 Python
python3 selenium自动化测试 强大的CSS定位方法
2019/08/23 Python
python用什么编辑器进行项目开发
2020/06/17 Python
HTML5注册页面示例代码
2014/03/27 HTML / CSS
详解html5 canvas 微信海报分享(个人爬坑)
2018/01/12 HTML / CSS
孝老爱亲模范事迹材料
2014/05/25 职场文书
销售团队口号大全
2014/06/06 职场文书
第一书记观后感
2015/06/08 职场文书
辩论赛新闻稿
2015/07/17 职场文书
2015年秋季运动会广播稿
2015/08/19 职场文书
2019年最新版见习人员管理制度!
2019/07/08 职场文书
世界十大儿童漫画书排名,法国国宝漫画排第五,第二是轰动日本连环
2022/03/18 欧美动漫