您好,登錄后才能下訂單哦!
這篇文章主要介紹了JavaScript中如何使用import和require打包,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
前言:
之前使用ES6寫代碼,webpack打包后上線,一點問題沒有,也看過打包后的代碼,長的很亂,也沒敢看看咋回事,加載后就是能運行!
今天通過個例子理解一下打包前,和打包后的代碼!
1.創(chuàng)建文件夾,并在里面創(chuàng)建兩個文件夾,app文件夾和public文件夾,app文件夾用來存放原始數(shù)據和我們將寫的JavaScript模塊,public文件夾用來存放之后供瀏覽器讀取的文件(包括使用webpack打包生成的js文件以及一個 index.html 文件)。接下來我們再創(chuàng)建三個文件:
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 元素的函數(shù),并依據CommonJS規(guī)范導出這個函數(shù)為一個模塊:
// 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模塊 返回的節(jié)點插入頁面。
//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"; }) ]);
首先最為層是包裹著立即執(zhí)行函數(shù)(加粗的內容),參數(shù)是一個數(shù)組,數(shù)組中每一項是對應的模塊,每個模塊包裹在 (function(module, exports, __webpack_require__) {//模塊內容 });
立即執(zhí)行函數(shù)運行執(zhí)行 return __webpack_require__(__webpack_require__.s = 0);
也就是執(zhí)行傳入數(shù)組中的第一個模塊main.js
將運行后的每個模塊掛載到installedModules = {}
上,當下個需要這個模塊直接返回當前模塊,不在運行代碼塊了!
接下來將require改為import看看打包后的如何實現(xiàn)
我們將 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打包”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業(yè)資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。