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 相关文章推荐
点击按钮或链接不跳转只刷新页面的脚本整理
Oct 22 Javascript
javascript获取鼠标点击元素对象(示例代码)
Dec 20 Javascript
JS辨别访问浏览器判断是android还是ios系统
Aug 19 Javascript
jQuery中nextAll()方法用法实例
Jan 07 Javascript
jQuery实现仿腾讯迷你首页选项卡效果代码
Sep 17 Javascript
javascript字符串对象常用api函数小结(连接,替换,分割,转换等)
Sep 20 Javascript
BOM之navigator对象和用户代理检测
Feb 10 Javascript
Angularjs单选框相关的示例代码
Aug 17 Javascript
Vue Cli3 创建项目的方法步骤
Oct 15 Javascript
layui使用表格渲染获取行数据的例子
Sep 13 Javascript
js 将多个对象合并成一个对象 assign方法的实现
Sep 24 Javascript
vue 解决在微信内置浏览器中调用支付宝支付的情况
Nov 09 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类继承 extends使用介绍
2014/01/14 PHP
ThinkPHP登录功能的实现方法
2014/08/20 PHP
smarty内置函数{loteral}、{ldelim}和{rdelim}用法实例
2015/01/22 PHP
thinkPHP5.1框架中Request类四种调用方式示例
2019/08/03 PHP
jQuery绑定事件不执行但alert后可以正常执行
2014/06/03 Javascript
JS实现从网页顶部掉下弹出层效果的方法
2015/08/06 Javascript
如何动态加载外部Javascript文件
2015/12/02 Javascript
基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)
2016/09/02 Javascript
D3.js实现直方图的方法详解
2016/09/25 Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
2017/02/19 Javascript
CodeMirror js代码加亮使用总结
2017/03/25 Javascript
Bootstrap.css与layDate日期选择样式起冲突的解决办法
2017/04/07 Javascript
jQuery实现web页面樱花坠落的特效
2017/06/01 jQuery
vue.js使用v-model指令实现的数据双向绑定功能示例
2018/05/22 Javascript
微信小程序Echarts图表组件使用方法详解
2019/06/25 Javascript
js实现数字从零慢慢增加到指定数字示例
2019/11/07 Javascript
Python中的startswith和endswith函数使用实例
2014/08/25 Python
Java中重定向输出流实现用文件记录程序日志
2015/06/12 Python
浅谈python中对于json写入txt文件的编码问题
2018/06/07 Python
利用ctypes获取numpy数组的指针方法
2019/02/12 Python
Python中关于浮点数的冷知识
2019/09/22 Python
在Python中实现函数重载的示例代码
2019/12/12 Python
浅谈python print(xx, flush = True) 全网最清晰的解释
2020/02/21 Python
python批量替换文件名中的共同字符实例
2020/03/05 Python
使用python把xmind转换成excel测试用例的实现代码
2020/10/12 Python
CSS3实现苹果手机解锁的字体闪亮效果示例
2021/01/05 HTML / CSS
施华洛世奇英国官网:SWAROVSKI英国
2017/03/13 全球购物
出国留学担保书
2014/05/20 职场文书
竞选班干部演讲稿500字
2014/08/20 职场文书
2014教师党员自我评议(5篇)
2014/09/20 职场文书
检察院对照“四风”认真查找问题落实整改措施
2014/09/26 职场文书
幼儿园感恩节活动方案
2014/10/06 职场文书
校园学雷锋广播稿
2014/10/08 职场文书
公司员工宿舍管理制度
2015/08/03 职场文书
2016入党积极分子党课学习心得体会
2015/10/09 职场文书
vue项目如何打包之项目打包优化(让打包的js文件变小)
2022/04/30 Vue.js