亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JavaScript中使用import 和require打包后實現原理分析

2019-11-19 14:13:14
字體:
來源:轉載
供稿:網友

前言:

之前使用ES6寫代碼,webpack打包后上線,一點問題沒有,也看過打包后的代碼,長的很亂,也沒敢看看咋回事,加載后就是能運行!

今天通過個例子理解一下打包前,和打包后的代碼!

1.創建文件夾,并在里面創建兩個文件夾,app文件夾和public文件夾,app文件夾用來存放原始數據和我們將寫的JavaScript模塊,public文件夾用來存放之后供瀏覽器讀取的文件(包括使用webpack打包生成的js文件以及一個 index.html 文件)。接下來我們再創建三個文件:

  • index.html --放在public文件夾中;
  • Greeter.js -- 放在app文件夾中;
  • main.js -- 放在app文件夾中;

此時項目結構如下圖所示


項目結構

我們在 index.html 文件中寫入最基礎的html代碼,它在這里目的在于引入打包后的js文件(這里我們先把之后打包后的js文件命名為 bundle.js ,之后我們還會詳細講述)。

<!-- index.html --><!DOCTYPE html><html lang="en"> <head>  <meta charset="utf-8">  <title>sample Project</title> </head> <body>  <div id='root'>  </div>  <script src="bundle.js"></script> </body></html>

我們在 Greeter.js 中定義一個返回包含問候信息的 html 元素的函數,并依據CommonJS規范導出這個函數為一個模塊:

// Greeter.jsexports.greet= function() { var greet = document.createElement('div'); greet.textContent = "Hi there and greetings!"; return greet;};exports.USER_INFO = "userInfo";

main.js 文件中我們寫入下述代碼,用以把 Greeter模塊 返回的節點插入頁面。

//main.js  let {greeter,USER_INFO} =require('./Greeter.js');console.log(USER_INFO);document.querySelector("#root").appendChild(greeter());

使用webpack打包后:

(function(modules){     var installedModules = {};  function __webpack_require__(moduleId) {    if (installedModules[moduleId]) {      return installedModules[moduleId].exports;    }    var module = installedModules[moduleId] = {      i: moduleId,      l: false,      exports: {}    };    modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);    module.l = true;    return module.exports;  }  __webpack_require__.m = modules;  __webpack_require__.c = installedModules;  __webpack_require__.d = function(exports, name, getter) {    if (!__webpack_require__.o(exports, name)) {      Object.defineProperty(exports, name, {        configurable: false,        enumerable: true,        get: getter      });    }  };  __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;  };  __webpack_require__.o = function(object, property) {    return Object.prototype.hasOwnProperty.call(object, property);  };  __webpack_require__.p = "";  return __webpack_require__(__webpack_require__.s = 0);})([(function(module, exports, __webpack_require__) {  //main.js  let {    greeter,    USER_INFO  } = __webpack_require__(1);  console.log(USER_INFO);  document.querySelector("#root").appendChild(greeter());}),(function(module, exports) {  // Greeter.js  exports.greet = function() {    var greet = document.createElement('div');    greet.textContent = "Hi there and greetings!";    return greet;  };  exports.USER_INFO = "userInfo";})]);

首先最為層是包裹著立即執行函數(加粗的內容),參數是一個數組,數組中每一項是對應的模塊,每個模塊包裹在 (function(module, exports, __webpack_require__) {//模塊內容 });

立即執行函數運行執行  return __webpack_require__(__webpack_require__.s = 0);

也就是執行傳入數組中的第一個模塊main.js

將運行后的每個模塊掛載到installedModules = {}上,當下個需要這個模塊直接返回當前模塊,不在運行代碼塊了!

接下來將require改為import看看打包后的如何實現

我們將 Greeter.js的信息改為如下 :

// Greeter.jsexport default function() { var greet = document.createElement('div'); greet.textContent = "Hi there and greetings!"; return greet;};export const USER_INFO = "userInfo";main.js 文件中的代碼,修改后//main.js import greet,{USER_INFO} from './Greeter.js';console.log(USER_INFO);document.querySelector("#root").appendChild(greet());

然后我們再次打包:

(function(modules) {  var installedModules = {};  function __webpack_require__(moduleId) {    if (installedModules[moduleId]) {      return installedModules[moduleId].exports;    }    var module = installedModules[moduleId] = {      i: moduleId,      l: false,      exports: {}    };    modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);    module.l = true;    return module.exports;  }  __webpack_require__.m = modules;  __webpack_require__.c = installedModules;  __webpack_require__.d = function(exports, name, getter) {    if (!__webpack_require__.o(exports, name)) {      Object.defineProperty(exports, name, {        configurable: false,        enumerable: true,        get: getter      });    }  };  __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;  };  __webpack_require__.o = function(object, property) {    return Object.prototype.hasOwnProperty.call(object, property);  };  __webpack_require__.p = "";  return __webpack_require__(__webpack_require__.s = 0);})([(function(module, __webpack_exports__, __webpack_require__) {  "use strict";  Object.defineProperty(__webpack_exports__, "__esModule", {    value: true  });  var __WEBPACK_IMPORTED_MODULE_0__Greeter_js__ = __webpack_require__(1);  //main.js  console.log(__WEBPACK_IMPORTED_MODULE_0__Greeter_js__["a"]);  document.querySelector("#root").appendChild(Object(__WEBPACK_IMPORTED_MODULE_0__Greeter_js__["b"])());}),(function(module, __webpack_exports__, __webpack_require__) {  "use strict";  __webpack_exports__["b"] = (function() {    var greet = document.createElement('div');    greet.textContent = "Hi there and greetings!";    return greet;  });;  const USER_INFO = "userInfo";  __webpack_exports__["a"] = USER_INFO;})]);

總結

以上所述是小編給大家介紹的JavaScript中使用import 和require打包后實現原理分析,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
海角国产乱辈乱精品视频| 国产香蕉精品视频一区二区三区| 大胆欧美人体视频| 色在人av网站天堂精品| 在线精品视频视频中文字幕| 欧美又大粗又爽又黄大片视频| 欧美老女人性生活| 性亚洲最疯狂xxxx高清| 日韩成人黄色av| 久久精品国产2020观看福利| 国产精品成人国产乱一区| 亚洲国产成人精品久久久国产成人一区| 欧美日韩ab片| 国产一区二区三区网站| 国产精品一区二区三区成人| 日韩av电影在线播放| 丝袜美腿亚洲一区二区| 992tv成人免费视频| 日韩精品在线观看一区二区| 日韩精品在线免费| 久久久久五月天| 福利视频一区二区| 亚洲国产日韩欧美在线图片| 欧美自拍视频在线| 777精品视频| 亚洲人成网7777777国产| 永久免费看mv网站入口亚洲| 国产精品第10页| 成人免费网站在线观看| 九九热精品视频国产| 亚洲国产精品久久91精品| 国外色69视频在线观看| 久久噜噜噜精品国产亚洲综合| 欧美一区二三区| 91精品久久久久| 狠狠干狠狠久久| 亚洲第一男人av| 国产精品直播网红| 中文字幕日韩精品在线| 日韩美女写真福利在线观看| 国产日韩亚洲欧美| 亚洲精品综合久久中文字幕| 国产午夜精品一区二区三区| 久久久精品影院| 青青草成人在线| 成人黄色大片在线免费观看| 成人伊人精品色xxxx视频| 国产精品对白刺激| 国产精品入口日韩视频大尺度| 宅男66日本亚洲欧美视频| 成人免费黄色网| 91网站在线免费观看| 成人欧美一区二区三区在线湿哒哒| 欧美午夜宅男影院在线观看| 欧美性猛交丰臀xxxxx网站| 亚洲网站在线观看| 91国偷自产一区二区三区的观看方式| 97在线免费观看视频| 国语自产精品视频在线看抢先版图片| 国产精品香蕉在线观看| 久久久999精品视频| 欧美黑人性视频| 国产精品极品在线| 国产精品嫩草影院一区二区| 亚洲激情久久久| 国产精品成人v| 日韩欧美综合在线视频| 亚洲欧美日韩综合| 粉嫩老牛aⅴ一区二区三区| 久久免费视频观看| 欧美极品少妇与黑人| 欧美制服第一页| 欧美大片第1页| 日韩av日韩在线观看| 91色琪琪电影亚洲精品久久| 91日韩在线播放| 久久久这里只有精品视频| 大量国产精品视频| 国产乱肥老妇国产一区二| 精品久久久久久久久久| 亚洲跨种族黑人xxx| 庆余年2免费日韩剧观看大牛| 日本欧美爱爱爱| 精品丝袜一区二区三区| 欧美一级片一区| 中文字幕国内精品| 精品日韩视频在线观看| 日韩视频免费观看| 中文字幕精品网| 在线观看国产精品日韩av| 欧美猛交ⅹxxx乱大交视频| 国产精品一区二区久久| 亚洲美女av在线播放| 日韩中文视频免费在线观看| 国产日韩欧美中文在线播放| 亚洲成年人在线| 久久精品视频亚洲| 久久久亚洲天堂| 国产精品第一视频| 日韩av电影在线播放| 精品久久久久久久久久久久久久| 色综合久久中文字幕综合网小说| 亚洲国产精品美女| 永久免费毛片在线播放不卡| 中文字幕亚洲激情| 国内精品久久久久久中文字幕| 91爱爱小视频k| 在线成人激情视频| 日韩视频免费大全中文字幕| 97视频在线观看免费高清完整版在线观看| 日韩欧美在线中文字幕| 日韩免费av在线| 色悠久久久久综合先锋影音下载| 亚洲人成亚洲人成在线观看| 亚洲风情亚aⅴ在线发布| 亚洲老板91色精品久久| 日韩激情视频在线播放| 91国语精品自产拍在线观看性色| 亚洲精品福利视频| 亚洲第一男人天堂| 成人精品在线观看| 亚洲国产精久久久久久久| 色一情一乱一区二区| 国产午夜精品一区理论片飘花| 日韩电影免费在线观看中文字幕| 久久99国产精品久久久久久久久| 欧美一级淫片播放口| 91禁国产网站| 久久久久中文字幕| 国产一区二区三区在线看| 亚洲bt欧美bt日本bt| 国产成人aa精品一区在线播放| 亚洲免费福利视频| 日韩欧美中文免费| 日韩国产精品亚洲а∨天堂免| 欧美在线亚洲一区| 欧美国产日本高清在线| 97在线观看视频国产| 中文精品99久久国产香蕉| 在线观看不卡av| 欧美精品福利在线| 国产精品99久久99久久久二8| 精品久久国产精品| 4k岛国日韩精品**专区| 色先锋资源久久综合5566| 日本一区二区在线免费播放| 亚洲视频在线免费看| 亚洲人成网在线播放| 欧美日产国产成人免费图片| 91日本视频在线| 亚洲欧美另类人妖| 午夜精品99久久免费| 日韩麻豆第一页| 欧美黄网免费在线观看| 亚洲另类激情图| 精品亚洲夜色av98在线观看| 欧美成人自拍视频| 久久久精品美女| 亚洲第一精品夜夜躁人人躁| 2021久久精品国产99国产精品| 久久成人这里只有精品| 欧美国产高跟鞋裸体秀xxxhd| 国产精品久久久久久久久男| 91在线观看免费网站|