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 相关文章推荐
禁止js文件缓存的代码
Apr 09 Javascript
js对象关系图 方便dom操作
Mar 18 Javascript
有关于JS构造函数的重载和工厂方法
Apr 07 Javascript
关于jquery中全局函数each使用介绍
Dec 10 Javascript
input标签内容改变的触发事件介绍
Jun 18 Javascript
百度地图api如何使用
Aug 03 Javascript
JS时间特效最常用的三款
Aug 19 Javascript
jQuery position() 函数详解以及jQuery中position函数的应用
Dec 14 Javascript
基于Bootstrap实现图片轮播效果
May 22 Javascript
node.js 核心http模块,起一个服务器,返回一个页面的实例
Sep 11 Javascript
layui自定义ajax左侧三级菜单
Jul 26 Javascript
微信小程序引入VANT组件的方法步骤
Sep 19 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数组总结篇(一)
2008/09/30 PHP
PHP base64+gzinflate压缩编码和解码代码
2008/10/03 PHP
使用PHP会话(Session)实现用户登陆功能
2013/06/29 PHP
PHP.ini中配置屏蔽错误信息显示和保存错误日志的例子
2014/05/12 PHP
phpQuery让php处理html代码像jQuery一样方便
2015/01/06 PHP
php提交表单时保留多个空格及换行的文本样式的方法
2017/06/20 PHP
Laravel-admin之修改操作日志的方法
2019/09/30 PHP
JXTree对象,读取外部xml文件数据,生成树的函数
2007/04/02 Javascript
javascript TextArea动态显示剩余字符
2008/10/22 Javascript
jQuery鼠标经过方形图片切换成圆边效果代码分享
2015/08/20 Javascript
实例详解ECMAScript5中新增的Array方法
2016/04/05 Javascript
jQuery购物网页经典制作案例
2016/08/19 Javascript
js中toString()和String()区别详解
2017/03/23 Javascript
JS解决移动web开发手机输入框弹出的问题
2017/03/31 Javascript
Angularjs中的验证input输入框只能输入数字和小数点的写法(推荐)
2017/08/16 Javascript
Bootstrap栅格系统的使用详解
2017/10/30 Javascript
如何用webpack4带你实现一个vue的打包的项目
2018/06/20 Javascript
一个Vue视频媒体多段裁剪组件的实现示例
2018/08/09 Javascript
Vue 实现一个命令式弹窗组件功能
2019/09/25 Javascript
Python探索之静态方法和类方法的区别详解
2017/10/27 Python
python实现机器人行走效果
2018/01/29 Python
python3 flask实现文件上传功能
2020/03/20 Python
pycharm中显示CSS提示的知识点总结
2019/07/29 Python
pytorch模型预测结果与ndarray互转方式
2020/01/15 Python
解决windows下python3使用multiprocessing.Pool出现的问题
2020/04/08 Python
python 读取.nii格式图像实例
2020/07/01 Python
详解Python Celery和RabbitMQ实战教程
2021/01/20 Python
德国家具购物网站:Möbel Höffner
2019/08/26 全球购物
The Athlete’s Foot新西兰:新西兰最大的运动鞋零售商
2019/12/23 全球购物
Java方面的关于数组和继承的笔面试题
2015/09/18 面试题
小学生表扬稿范文
2015/05/05 职场文书
Python爬虫之爬取某文库文档数据
2021/04/21 Python
JMeter对MySQL数据库进行压力测试的实现步骤
2022/01/22 MySQL
解决persistence.xml配置文件修改存放路径的问题
2022/02/24 Java/Android
AngularJS实现多级下拉框
2022/03/25 Javascript
MySQL 外连接语法之 OUTER JOIN
2022/04/09 MySQL