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 相关文章推荐
document.compatMode介绍
May 21 Javascript
读jQuery之十四 (触发事件核心方法)
Aug 23 Javascript
JQuery对class属性的操作实现按钮开关效果
Oct 11 Javascript
jQuery绑定事件不执行但alert后可以正常执行
Jun 03 Javascript
JS按回车键实现登录的方法
Aug 25 Javascript
jQuery动画与特效详解
Feb 01 Javascript
setTimeout内不支持jquery的选择器的解决方案
Apr 28 Javascript
javascript实现根据时间段显示问候语的方法
Jun 18 Javascript
js使用原型对象(prototype)需要注意的地方
Aug 28 Javascript
Vue 去除路径中的#号
Apr 19 Javascript
Puppet的一些技巧
Sep 17 Javascript
js for终止循环 跳出多层循环
Oct 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
PHP 强制下载文件代码
2010/10/24 PHP
修改php.ini以达到屏蔽错误信息并记录日志
2013/06/16 PHP
smarty模板引擎中变量及变量修饰器用法实例
2015/01/22 PHP
JS版的date函数(和PHP的date函数一样)
2014/05/12 Javascript
jQuery的context属性用法实例
2014/12/27 Javascript
Flow之一个新的Javascript静态类型检查器
2015/12/21 Javascript
Angular.js与Bootstrap相结合实现表格分页代码
2016/04/12 Javascript
JS判断form内所有表单是否为空的简单实例
2016/09/09 Javascript
bootstrap vue.js实现tab效果
2017/02/07 Javascript
jQuery插件FusionCharts绘制的3D环饼图效果示例【附demo源码】
2017/04/02 jQuery
基于JavaScript实现评论框展开和隐藏功能
2017/08/25 Javascript
JS改变页面颜色源码分享
2018/02/24 Javascript
解决angularjs WdatePicker ng-model的问题
2018/09/13 Javascript
解决新建一个vue项目过程中遇到的问题
2020/10/22 Javascript
原生js实现点击按钮复制内容到剪切板
2020/11/19 Javascript
Python常用模块介绍
2014/11/21 Python
部署Python的框架下的web app的详细教程
2015/04/30 Python
Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】
2017/06/07 Python
python将文本分每两行一组并保存到文件
2018/03/19 Python
python集合是否可变总结
2019/06/20 Python
Jupyter Notebook安装及使用方法解析
2020/11/12 Python
Python Process创建进程的2种方法详解
2021/01/25 Python
Python3爬虫RedisDump的安装步骤
2021/02/20 Python
ECCO爱步美国官网:来自丹麦的鞋履品牌
2016/11/23 全球购物
COACH德国官方网站:纽约现代奢侈品牌,1941年
2018/06/09 全球购物
NHL官方在线商店:Shop.NHL.com
2020/05/01 全球购物
幼儿园安全责任书
2014/04/14 职场文书
创先争优一句话承诺
2014/05/29 职场文书
小学四年级学生评语
2014/12/26 职场文书
2015年党风廉政承诺书
2015/01/22 职场文书
创业计划书详解
2019/07/19 职场文书
PHP实现考试倒计时功能代码
2021/04/16 PHP
详解PHP设计模式之依赖注入模式
2021/05/25 PHP
Vue CLI中模式与环境变量的深入详解
2021/05/30 Vue.js
css中z-index: 0和z-index: auto的区别
2021/08/23 HTML / CSS
Win11 BitLocker 驱动器加密
2022/04/19 数码科技