这次给大家带来JS里怎么使用import 和require打包,JS里使用import 和require打包的注意事项有哪些,下面就是实战案例,一起来看一下。
前言:
之前使用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> <p id='root'> </p> <script src="bundle.js"></script> </body> </html>
我们在 Greeter.js 中定义一个返回包含问候信息的 html 元素的函数,并依据CommonJS规范导出这个函数为一个模块:
// Greeter.js exports.greet= function() { var greet = document.createElement('p'); 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('p'); 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('p'); 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_0Greeter_js = webpack_require(1); //main.js console.log(WEBPACK_IMPORTED_MODULE_0Greeter_js["a"]); document.querySelector("#root").appendChild(Object(WEBPACK_IMPORTED_MODULE_0Greeter_js["b"])()); }), (function(module, webpack_exports, webpack_require) { "use strict"; webpack_exports["b"] = (function() { var greet = document.createElement('p'); greet.textContent = "Hi there and greetings!"; return greet; });; const USER_INFO = "userInfo"; webpack_exports["a"] = USER_INFO; })]);
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
以上是JS里怎么使用import 和require打包的详细内容。更多信息请关注PHP中文网其他相关文章!

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

记事本++7.3.1
好用且免费的代码编辑器

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能