webpack打包非模块化js的方法
程序员文章站
2023-10-23 21:15:22
本文主要记录了非模块化js如何使用webpack打包
模块化打包实现方式
webpack是模块打包工具,通过入口文件递归遍历其依赖图谱,绝对是打包神器。
bar.js...
本文主要记录了非模块化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压缩后一样正常运行
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。