首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

拼多多和酷家乐面试总结(已拿offer)

说可以通过 context 方式,就不需要每个组件都传了。 import 和 require 导入区别 高频题,考察 ES6 模块和 CommonJS 模块 区别。关键点:1....推荐文章:前端模块化:CommonJS,AMD,CMD,ES6[4] require 什么性能问题 好好想想上一个区别就能想到了 组件库如何做按需加载 常用是babel-plugin-import...React.lazy React.lazy 原理是啥? webpack 能动态加载 require 引入模块?...应该是不能,前面说了,webpack 支持动态导入基本上只能用import() 和require.ensure。 require 引入模块 webpack 能做 Tree Shaking ?...不能,Tree Shaking 需要静态分析,只有 ES6 模块才支持。 设计一个 input 组件需要哪些属性。

1.7K61
您找到你想要的搜索结果了吗?
是的
没有找到

JAVASCRIPT模块化3篇之二:AMD规范

七、模块规范 先想一想,为什么模块很重要? 因为模块,我们就可以更方便地使用别人代码,想要什么功能,就加载什么模块。...但是,这样做一个前提,那就是大家必须以同样方式编写模块,否则你写法,写法,岂不是乱了套!考虑到Javascript模块现在还没有官方规范,这一点就更重要了。...node.js模块系统,就是参照CommonJS规范实现。在CommonJS中,一个全局性方法require(),用于加载模块。假定有一个数学模块math.js,就可以像下面这样加载。   ...var math = require(‘math’); 然后,就可以调用模块提供方法:   var math = require(‘math’);   math.add(2,3); // 5 因为这个系列主要针对浏览器编程...但是,由于一个重大局限,使得CommonJS规范不适用于浏览器环境。还是上一节代码,如果在浏览器中运行,会有一个很大问题,你能看出来

66410

Javascript模块化编程(二):AMD规范

这个系列第一部分介绍了Javascript模块基本写法,今天介绍如何规范地使用模块。 (接上文) 七、模块规范 先想一想,为什么模块很重要?...因为模块,我们就可以更方便地使用别人代码,想要什么功能,就加载什么模块。 但是,这样做一个前提,那就是大家必须以同样方式编写模块,否则你写法,写法,岂不是乱了套!...node.js模块系统,就是参照CommonJS规范实现。在CommonJS中,一个全局性方法require(),用于加载模块。假定有一个数学模块math.js,就可以像下面这样加载。   ...var math = require('math'); 然后,就可以调用模块提供方法:   var math = require('math');   math.add(2,3); // 5...还是上一节代码,如果在浏览器中运行,会有一个很大问题,你能看出来

1.1K80

Javascript模块化编程(二):AMD规范

这个系列第一部分介绍了Javascript模块基本写法,今天介绍如何规范地使用模块。 (接上文) 七、模块规范 先想一想,为什么模块很重要?...因为模块,我们就可以更方便地使用别人代码,想要什么功能,就加载什么模块。 但是,这样做一个前提,那就是大家必须以同样方式编写模块,否则你写法,写法,岂不是乱了套!...node.js模块系统,就是参照CommonJS规范实现。在CommonJS中,一个全局性方法require(),用于加载模块。假定有一个数学模块math.js,就可以像下面这样加载。   ...var math = require('math'); 然后,就可以调用模块提供方法:   var math = require('math');   math.add(2,3); // 5...但是,由于一个重大局限,使得CommonJS规范不适用于浏览器环境。还是上一节代码,如果在浏览器中运行,会有一个很大问题,你能看出来

1.1K60

重构:从Promise到AsyncAwait

async函数会隐式地返回一个Promise,因此可以直接return变量,无需使用Promise.resolve进行转换 下面,我们可以通过一个非常简单示例来体验一下Async/Await酸爽:...示例2:Promise.promisify 使用Promise.promisify将不支持Promise方法Promise化,调用异步接口时候两种方式: const Promise = require...示例3:Promise.map 使用Promise.map读取多个文件数据,调用异步接口时候两种方式: const Promise = require("bluebird") var readFile...但是,在调用readFile与Promise.map函数时,使用Async/Await与使用Promise是两种不同写法,它们是相互替代关系。 Async/Await什么问题啊。...使用了await函数定义时要加一个async,调用异步函数时候需要一个await,这玩意写多了也觉着烦,有时候还容易忘掉。不写async代码直接报错,不写await代码执行会出错。

1.2K31

当creator遇上protobufjs—叛逆成长

我们之前讲过要在Creator原生环境下使用protobufjs,使用伪装者方式模拟nodejsfs\path模块可以完美解决问题。...通过这个nameMap明白了为什么在Creator中可以直接require('文件名'),而不需要完整路径,同时也明白了为什么js文件不能同名原因。...如果这样去实现protobufjsfetch函数,只能是异步加载,而我之前给pbkiller范例都是同步加载!眼前一黑,回过神来,绝对不能用这种方法坑了插件用户。 3....三、逆境成长 经过上面对现状、问题、策略、步骤自问自答,解决方法跃然纸上。看到这里有人可能会问,这不是四象限法法? 1. 四象限法 说实话最早也不知道四象限法,它是这个周未刚学到新知识。...当知道这种思考解决问题方法时,立刻就想起解决protobufjs在creator1.7模拟器上问题,当时不正是用这种解决问题

64830

理论 | Node中没搞明白require和import,你会被坑很惨

注意,下面的语法严重错误: export在导出接口时候,必须与模块内部变量具有一一对应关系。直接导出1没有任何意义,也不可能在import时候一个变量与之对应。...而且,大部分风格都建议,模块中最好在末尾用一个export导出所有的接口,例如: import导入模块 import语法跟require不同,而且import必须放在文件最开始,且前面不允许其他逻辑代码...import中as就很简单,就是你在使用模块里面的方法时候,给这个方法一个别名,好在当前文件里面使用。...所以,下面这种写法你也应该理解了吧: import后面第一个$是{defalut as $}替代写法。...而且require理论上可以运用在代码任何地方,甚至不需要赋值给某个变量之后再使用,比如: 你在使用时,完全可以忽略模块化这个概念来使用require,仅仅把它当做一个node内置全局函数,它参数甚至可以是表达式

1.1K10

Node中没搞明白require和import,你会被坑很惨

ES6标准发布后,module成为标准,标准使用是以export指令导出接口,以import引入模块,但是在我们一贯node模块中,我们采用是CommonJS规范,使用require引入模块使用.../a'; a(); 上面这段代码,export时候,对外提供接口是fun,它是a.js内部a这个函数别名,但是在模块外面,认不到a,只能认到fun。...import中as就很简单,就是你在使用模块里面的方法时候,给这个方法一个别名,好在当前文件里面使用。...而且require理论上可以运用在代码任何地方,甚至不需要赋值给某个变量之后再使用,比如: require('..../a')[0]; // a模块导出一个数组 你在使用时,完全可以忽略模块化这个概念来使用require,仅仅把它当做一个node内置全局函数,它参数甚至可以是表达式: require(process.cwd

2.7K20

Node中没搞明白require和import,你会被坑很惨

ES6标准发布后,module成为标准,标准使用是以export指令导出接口,以import引入模块,但是在我们一贯node模块中,我们采用是CommonJS规范,使用require引入模块使用.../a'; a(); 上面这段代码,export时候,对外提供接口是fun,它是a.js内部a这个函数别名,但是在模块外面,认不到a,只能认到fun。...import中as就很简单,就是你在使用模块里面的方法时候,给这个方法一个别名,好在当前文件里面使用。...而且require理论上可以运用在代码任何地方,甚至不需要赋值给某个变量之后再使用,比如: require('..../a')[0]; // a模块导出一个数组 你在使用时,完全可以忽略模块化这个概念来使用require,仅仅把它当做一个node内置全局函数,它参数甚至可以是表达式: require(process.cwd

1.2K80

Webpack 实现 Tree shaking 前世今生

webpack 本身在打包时只能标记未使用代码而不移除,而识别代码未使用标记并完成 tree-shaking 其实是 UglifyJS、babili、terser 这类压缩代码工具。...一般使用 Babili 替代 uglify Babili 插件式和 babel-loader 预设两种方式。...方法名称 首先我们要知道,为了正常运行业务项目,Webpack 需要将开发者编写业务代码以及支撑、调配这些业务代码运行时一并打包到产物(bundle)中。...BabelMinifyWebpackPlugin 一般使用 babili 替代 UglifyJS Babili 插件式和 babel-loader 预设两种方式。...传到函数中入参是无法被刚才注释所标记,需要单独每一个标记才可以。如果一个没被使用变量定义初始值被认为是无副作用(pure),它会被标记为死代码,不会被执行且会被压缩工具清除掉。

1.1K20

webpack 为什么这么难用?2

是,这两个文件从文件名上看,起码是方法库(实际上也确实是),使用起来不会太复杂。...换句话说,如果你想给 webpack 写一个广为人知插件,你就必须深入了解 webpack 全部,这一点不反对,毕竟 webpack 开发者和 webpack 使用者在能力要求上有高低之分。...但插件体系也同样很多问题。 插件数量问题 先问一个问题,一个通过 webpack 构建项目需要多少插件?...所以我每次改一个项目的构建时,基本都是这样: 面向配置插件 在讨论这个话题之前,先回答两个问题: webpack 插件先后顺序会影响构建结果? 如果插件顺序不同,会影响哪些东西?...当然还是要说一句,gulp 和 webpack 并不能直接比较,前者是一个 task runner,而后者是一个 module bundler,它们两者之间都有一些相互不可替代功能。

65030

【开发基础】Node.js优化技巧概述

Node.js一个显著特征是:它从上到下设计和实现都是为了实现异步。这让它非常适合用于事件型程序。 不幸是,还是可能会发生同步/阻塞调用。...例如,许多文件系统操作同时拥有同步和异步版本,比如writeFile和writeFileSync。即使你用代码来控制同步方法,但还是可能不注意地用到阻塞调用外部函数库。...2.关闭套接字池 Node.jshttp客户端会自动地使用套接字池:默认地,它会限制每台主机只能有5个套接字。...通过不包含上述express配置让session自由化,你会看到更好性能。 8.使用二进制模块 如果可能,用二进制模块取代JavaScript模块。...对于服务器代码也保持同样理念。偶尔回头看看你决定且问自己像这样问题:“我们真的需要这个模块?”,“我们为什么用这个框架,它开销值得我们使用?”,“我们能用简便方法实现它?”。

85260

使用nodejs创建一个webServer

什么是 nodejs Node.js发布于2009年5月,由Ryan Dahl开发,是一个基于Chrome V8引擎JavaScript运行环境,使用一个事件驱动、非阻塞式I/O模型, 让JavaScript...Node.js对一些特殊用例进行优化,提供替代API,使得V8在非浏览器环境下运行得更好,V8引擎执行Javascript速度非常快,性能非常好,基于Chrome JavaScript运行时建立平台...如何使用nodejs读写文件 // 1、使用 requrie 加载 fs 核心使用模块 var file = require('fs') // 2、读取文件 file.readFile('hello.txt...nodejs创建web服务器 // 1、使用 requrie 加载 http 核心使用模块 var http = require('http') // 2、http.createServer 创建服务器实例...请关注博客https://www.lzmvlog.top/

53950

本想搞清楚ESM和CJS模块互相转换问题,没想到写完问题更多了

目前主流两种模块语法,一是Node.js专用CJS,另一种是浏览器和Node.js都支持ESM,在ESM规范没有出来之前,Node.js模块编写使用都是CJS,但是现在ESM已经逐渐在替代CJS...那么问题来了,比如说早期开发了一个CJS包,现在想把它转成ESM语法用来支持在浏览器端使用,或者现在使用ESM开发一个包,想转换成CJS语法用来支持老版Node.js,转换工具有很多,比如Webpack...,因此export default命令只能使用一次 // 本质上,export default就是输出一个叫做default变量或方法,所以可以直接一个值,导入时可以使用任意名称 export default...实际上,CJS和ESM三个重大差异: CJS 模块输出一个拷贝,ESM 模块输出是值引用 CJS 模块是运行时加载,ESM 模块是编译时输出接口 CJS 模块require()是同步加载模块...,所以具名导出就不可能,只能使用默认导出,这样只管导出module.exports属性,至于它上面都有啥就不管了。

1.7K60

手动实现一个 JavaScript 模块执行器

如果在 node 环境,我们可能会很快想到使用 Module 模块, Module 模块中有一个私有函数 _compile,可以动态加载一个模块: export function getRuleFromString...node Module 模块加载原理 Node.js 遵循 CommonJS 规范,该规范核心思想是允许模块通过 require 方法来同步加载所要依赖其他模块,然后通过 exports 或 module.exports...也可以使用 exports 来导出一个模块。...所以,后来又出现了很多在沙箱而非全局作用域中执行字符串代码替代方案。 new Function() Function 构造器是 eval() 一个替代方案。...,它只能作为一个没有任何副作用纯函数,当我们想要使用某些全局变量或类时,可以自定义一个白名单: const ALLOW_LIST = ['console']; function compileCode

76941

模块化之AMD、CMD、UMD、commonJS

早之前JavaScript模块以下几种: 函数:每一个函数就是一个模块 对象:一个模块就是一个对象,属性有方法 立即执行函数:跟函数原理一样 而模块一个重点就是规范,不能各自写各自需要统一使用一个规范...CommonJS规范中一个文件就是一个模块,通过exports暴露模块内容,通过require加载模块使用,且commonJS是同步,因为在服务端文件就在本地,可以不用考虑异步。...要说requireJS和seaJS最大区别就是加载机制: SeaJS只会在真正需要使用(依赖)模块时才执行该模块 RequireJS会先尽早地执行(依赖)模块, 相当于所有的require都被提前了...AMD异步加载,commonJS同步加载,而UMD就是判断环境,nodejs模块require)就使用commonJS,AMD模块(define)就使用AMD。...ES6: ES6提供了模块化export和import实现。可以说ES6模块实现是替代UMD,服务器和浏览器都会实现ES6模块化。

66940

js模块化编程之彻底弄懂CommonJS和AMDCMD!(转)

先回答:为什么模块很重要? 答:因为模块,我们就可以更方便地使用别人代码,想要什么功能,就加载什么模块。...但是,这样做一个前提,那就是大家必须以同样方式编写模块,否则你写法,写法,岂不是乱了套! 于是下面三个模块规范出来了,这篇文章也出来了(拼出来 {捂脸笑})。...在CommonJS中,一个全局性方法require(),用于加载模块。假定有一个数学模块math.js,就可以像下面这样加载。...根据 mocha 内部实现,做了一个纯浏览器 CommonJS 模块加载器 tiny-browser-require 。完全不需要命令行,直接放进浏览器即可,所有代码只有30多行。...使用require.config()方法,我们可以对模块加载行为进行自定义。require.config()就写在主模块(main.js)头部。

1.6K30
领券