001、前言


什么是模块化开发?
 
为了提高代码的复用度,开发人员会按照功能把大量的js代码分成若干文件,这样在多个页面就可以使用同一个文件了。,下面是某个网站的js引用情况
怎么会有这么多js文件引入,吓死宝宝了,那就是网站功能比较多喽,可是我们知道,
     1、网站加载js时会停止其它资源加载,并停止页面渲染(就是我们常说的白屏现象)
     2、加载过多的js文件可能造成浏览器假死(浏览器一直在加载,不能进行页面操作)
     3、假如文件有依赖关系,就是使用B.js需要先加载A.js,那我们还要小心翼翼的去引入js,不过这么多文件,鬼理得清依赖关系啊
 
额 。。。容许我懵逼片刻,那怎么办呢,网站的功能日益强大,js文件越来越多是必然的的事情,于是出现了模块化开发。
 
 
实现特定功能的js文件称之为  模块 ,有了模块之后,我们就能更好的管理自己的代码及使用别人的代码了。  将庞大的系统划分成若干个模块去实现的过程 成为 模块化
 
现在的web系统越来越庞大、复杂,需要团队分工,多人协作,大型系统的javascript文件经常存在复杂的依赖关系,后期的维护成本会越来越高。
 
在ES6之前,javascript还不支持原生的模块化,如果要实现模块化那么就需要借助一些框架比如:require.js或者sea.js。

002、模块module


假设我们现在有一个module-a.js和module-b.js.我们将它们视为2个模块

 

首先我们先了解下什么是模块?

     模块module:模块就是一个对其他模块暴露属性和方法的文件

 

我们用module-a.js和module-b.js来演示如何暴露属性和方法。

 

首先我们先要来了解几个方法:

     1、exprot:导出。作为一个模块,它可以选择性的暴露自己的属性和方法,供其他模块使用

 

     2、import:导入。作为一个模块,可以根据需要,引入其他模块提供的属性和方法,供自己的模块使用
 

003、导入导出模块的属性和方法

在模块B中我们用关键字export对外暴露了一个属性name1,接下来我们看模块A如何接受这个属性


004、导入模块module-b

我们使用关键字import导入模块B中的name1属性,并且赋值给变量name1.关键字from的作用是指向你想要引入的模块

005、批量导出

对于属性和方法我们可以批量暴露出去

推荐使用批量导出:
    
     当对外暴露的属性和方法较多的时候,这种方法可以更直观的看出当前模块暴露哪些变量

006、批量导入

注意:
     批量导入的时候变量名必须跟导出的一致才能准确获取,位置顺序无要求

007、重命名导入的变量


关键字as:关键字as可以实现变量名更改

 

     用法:变量名 as 更改的变量名

 在export里面修改 和 import里面修改都可以

008、整体导入

使用*将模块里面的所有属性和方法整体导入赋值给一个变量。就相当于给一个对象添加了属性和值

009、默认导出

每一个模块都支持我们导出一个没有名字的变量,我们可以使用关键字 export default来实现

010、注意事项

a、声明基本变量对外只能读取不能修改


b、如果导出的是对象,则可以修改


c、导入不存在的值 那么值就是undefined
 

webpack将es6代码转为es5代码

001、安装webpack

全局安装
 
npm install webpack -g

002、局部安装相应插件

npm install webpack --save-dev

npm install --save-dev babel-loader babel-core

npm install babel-preset-es2015 --save-dev

003、在根目录创建文件.babelrc文件

在命令行中:
echo { presets: ["es2015"] }> .babelrc 在根目录创建.babelrc文件并写入{presets: ['es2015']}

004、配置webpack.config.js

module.exports = {
    entry:{
        main:"./es6/main.js"
    },
    output:{
        path:__dirname,
        filename:"./es5/[name].js"
    },
    module: {
        loaders: [{ test: /\.js$/, exclude: /node_modules/, loader: "babel-loader" } ]
    }
}

005、运行webpack

【ES6】001---module模块------【巷子】的更多相关文章

  1. ES6中的模块

    前面的话 JS用"共享一切"的方法加载代码,这是该语言中最容出错且容易令人感到困惑的地方.其他语言使用诸如包这样的概念来定义代码作用域,但在ES6以前,在应用程序的每一个JS中定义 ...

  2. es6(六):module模块(export,import)

    es6之前,社区模块加载方案,主要是CommonJS(用于服务器)和AMD(用于浏览器) 而es6实现的模块解决方案完全可以替代CommonJS和AMD ES6模块设计思想:尽量静态化,在编译时就能确 ...

  3. ECMA Script 6_模块加载方案 ES6 Module 模块语法_import_export

    1. 模块加载方案 commonJS 背景: 历史上,JavaScript 一直没有模块(module)体系, 无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来. 其他语言都有这项功能: ...

  4. ES6之module

    该博客原文地址:http://www.cnblogs.com/giggle/p/5572118.html 一.module概述 JavaScript一直没有模块体系,但是伴随着ES6的到来,modul ...

  5. 前端MVC Vue2学习总结(七)——ES6与Module模块化、Vue-cli脚手架搭建、开发、发布项目与综合示例

    使用vue-cli可以规范项目,提高开发效率,但是使用vue-cli时需要一些ECMAScript6的知识,特别是ES6中的模块管理内容,本章先介绍ES6中的基础与模块化的内容再使用vue-cli开发 ...

  6. 前端模块化小总结—commonJs,AMD,CMD, ES6 的Module

    随着前端快速发展,需要使用javascript处理越来越多的事情,不在局限页面的交互,项目的需求越来越多,更多的逻辑需要在前端完成,这时需要一种新的模式 --模块化编程 模块化的理解:模块化是一种处理 ...

  7. ES6 模块化(Module)export和import详解 export default

    ES6 模块化(Module)export和import详解 - CSDN博客 https://blog.csdn.net/pcaxb/article/details/53670097 微信小程序笔记 ...

  8. 利用Module模块把构建的神经网络跑起来

    训练一个神经网络往往只需要简单的几步: 准备训练数据 初始化模型的参数 模型向往计算与向后计算 更新模型参数 设置相关的checkpoint 如果上述的每个步骤都需要我们写Python的代码去一步步实 ...

  9. JavaScript ES6 module 模块

    在使用JavaScript开发大型项目时,模块开发概念是一个必须考虑的问题.其目的就是通过命名空间对各类业务对象进行一定的封装,防止命名冲突. 本篇着重介绍ES6 module中的export和imp ...

随机推荐

  1. 自然语言交流系统 phxnet团队 创新实训 项目博客 (一)

    2D文字聊天界面大致预期实现文字输入.发送消息.接收消息.你可以通过点击按钮让机器人开启聊天模式或者学习模式.又或是进入3D语音聊天界面或者退出. 目背景 (1) 开发动机的形态 随着科技的进步与生活 ...

  2. 《FPGA全程进阶---实战演练》第三章之PCB设计之去耦电容

    1.关于去耦电容为何需要就近摆放? 大多数资料有提到过,去耦电容就近放置,是从减小回路电感的角度去谈及摆放问题,其实还有一个原则就是去耦半径的问题,如果电容离着芯片位置较远,超过去耦半径,会起不到去耦 ...

  3. Spring IO platform 简介

    前提:熟悉Spring基础知识. 简介:Spring IO Platform将 the core Spring APIs 集成到一个Platform中.它提供了Spring portfolio中的大量 ...

  4. gsoap 学习 1-如何使用

    新年伊始,想把onvif和gsoap boa这三个东西学习下,并作下笔记,当然为了省时间,我昨天下午看了一个下午的gsaop官网pdf感触良多,也做了小测试,废话少说,一下也有一些是摘自网友博客,大部 ...

  5. linux -- ubuntu dash bash

    终端:即所谓的命令行界面,又称命令终端,用户输入shell命令用的窗口,跟Windows里的DOS界面差不多. shell:意为“壳”,是操作系统与用户交互用的接口,在命令终端里可以使用shell.s ...

  6. TaintDroid下载预编译(五):TaintDroid(Android)系统编译虚拟机和真机測试

    光说不练非好汉,如今就让我们开启自己编译的系统測试!事实上懂得这些过程.就知道了Android手机系统定制的整个流程.现有的智能机都是使用Google的android开源的系统然后加入一些自己的东西. ...

  7. 转载:erlang程序优化点的总结

    erlang程序优化点的总结(持续更新) 转自:http://wqtn22.iteye.com/blog/1820587 转载请注明出处 注意,这里只是给出一个总结,具体性能需要根据实际环境和需要来确 ...

  8. 批量快速的导入导出Oracle的数据(spool缓冲池、java实现)

    1. Java代码实现思路 BufferedWriter writefile = new BufferedWriter(new FileWriter(file));  writefile.write( ...

  9. 动态生成的DOM不会触发onclick事件的原因及解决方法

    最近朋友在做一个项目的时候,遇到动态加载微博内容,然后点击“展开评论”后获取该微博的所有评论.这里使用了动态加载的<span mid='123456789′ class='get_comment ...

  10. NHibernate初学六之关联多对多关系

    1:创建三张表T_Course.T_Student.T_Middle:其中一个学生可以对应多个课程,一个课程也可以对应多个学生,用T_Middle存放它们的关系内容: CREATE TABLE [db ...