<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

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

        來源:懂視網 責編:小采 時間:2020-11-27 22:17:53
        文檔

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

        JavaScript中使用import 和require打包后實現原理分析:前言: 之前使用ES6寫代碼,webpack打包后上線,一點問題沒有,也看過打包后的代碼,長的很亂,也沒敢看看咋回事,加載后就是能運行! 今天通過個例子理解一下打包前,和打包后的代碼! 1.創建文件夾,并在里面創建兩個文件夾,app文件夾和public文件夾,app文
        推薦度:
        導讀JavaScript中使用import 和require打包后實現原理分析:前言: 之前使用ES6寫代碼,webpack打包后上線,一點問題沒有,也看過打包后的代碼,長的很亂,也沒敢看看咋回事,加載后就是能運行! 今天通過個例子理解一下打包前,和打包后的代碼! 1.創建文件夾,并在里面創建兩個文件夾,app文件夾和public文件夾,app文

        前言:

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

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

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

      1. index.html --放在public文件夾中;
      2. Greeter.js -- 放在app文件夾中;
      3. main.js -- 放在app文件夾中;
      4. 此時項目結構如下圖所示


        項目結構

        我們在 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.js
        exports.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.js
        export 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打包后實現原理分析,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

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

        JavaScript中使用import 和require打包后實現原理分析:前言: 之前使用ES6寫代碼,webpack打包后上線,一點問題沒有,也看過打包后的代碼,長的很亂,也沒敢看看咋回事,加載后就是能運行! 今天通過個例子理解一下打包前,和打包后的代碼! 1.創建文件夾,并在里面創建兩個文件夾,app文件夾和public文件夾,app文
        推薦度:
        標簽: 使用 原理 js
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 国产a级特黄的片子视频免费| 国产人成免费视频网站| 免费国产一级特黄久久| 国产99在线|亚洲| 久久精品国产免费观看| 久久亚洲AV无码精品色午夜| 99精品视频在线观看免费播放| 亚洲精品无码成人片久久| 最近中文字幕免费大全| 亚洲AV成人片色在线观看高潮| 你懂的在线免费观看| 亚洲国产一区二区a毛片| 99re免费视频| 亚洲av午夜精品无码专区| 歪歪漫画在线观看官网免费阅读 | 亚洲午夜久久影院| 5555在线播放免费播放| 亚洲中文无码mv| 国产国产人免费人成免费视频 | 亚洲第一页综合图片自拍| 国产精品免费久久久久电影网| 不卡精品国产_亚洲人成在线| 成人毛片100免费观看| 91亚洲导航深夜福利| 无码人妻精品一二三区免费| 久久精品亚洲日本波多野结衣| 高清在线亚洲精品国产二区| 免费无码又爽又刺激网站直播| 亚洲最新中文字幕| 国产男女猛烈无遮挡免费视频网站 | 久久国产免费直播| 久久亚洲AV成人无码软件| 成年人在线免费观看| 一级毛片在线播放免费| 亚洲精品高清久久| 国产无遮挡色视频免费视频| 野花香在线视频免费观看大全 | 老子影院午夜伦不卡亚洲| 亚洲人精品午夜射精日韩| 91网站免费观看| 一个人看的免费视频www在线高清动漫 |