| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> Node.js第二天(模块化和包) -> 正文阅读 |
|
[JavaScript知识库]Node.js第二天(模块化和包) |
作者:http://javascript.ruanyifeng.com/nodejs/packagejson.html |
1.模块化基本介绍?????1.1模块???????? ????????模块是对功能相似的函数或属性的封装。例如: ????????? fs 模块中封装了一系列文件操作的函数。例如:fs.readFile()、fs.writeFile() ????????? path 模块中封装了一系列路径处理的函数。例如:path.join(),path.basename() ????????模块的好处:提高了函数的复用性! ? ??1.2什么是模块化????????? ????????一个js文件可以引入其他的js文件,能使用引入的js文件的中的变量、数据,这种特性就称为? ? ? ? ? 模块化。 ? ? ? ?nodejs是支持模块化的。 ? ? 1.3 es6之前js没有模块化的功能????????提问:在浏览器中,我们写代码时,
????????对于如上的代码结构, ????????问:如何能让index.js中的getData去使用tool.js中的doSomething()函数? ????????答:通过index.html过渡。在index.html中,先引入tool.js,再引入index.js ????????问:为什么不能直接让index.js来直接使用tool.js的函数,而要通过index.html来统一管理呢? ????????答:原因很简单:es5中不支持模块化 ? 1.4 不支持模块化会有什么问题?? ? ? ? 会出现代码污染 ......? ?代码维护起来会很困难? 2.模块化发展?? 2.1历程
?2.2体验演示性的学习,让大家了解几种模块化的写法
参考: LABjs、RequireJS、SeaJS 哪个最好用?为什么? - 知乎 3.模块化规范??? 3.1常见的模块化规范
4.用commonJS规范来自定义模块? 4.1遵守commonJS规范? ?在Node.js 中定义模块,要遵守 CommonJS 的模块化规范。CommonJS 规范中主要规定了以下? ? ?3 项内容: ? ?①导入其它模块时,统一使用 require() 函数。 ? ?②每个 .js 文件,都是一个独立的模块,模块内的成员都是私有的。 ? ?③在每个 JS 模块中,使用 module.exports 向外共享成员。 ? 4.2示例? 自定义模块的特点: ①使用 require('自定义模块的路径') 即可导入自定义模块; ②自定义模块内的变量、函数等都是私有的,默认无法被外界访问到; 5.练习?
3.根据路径,导入自定义模块后打印出返回的结果如下? 4.输出结果? ? 6.导出模块的两种方式??6.1两种方式
6.2 两个对象的关系 ??初始exports和module.exports是指向同一块内存区域,其内容都是一个空对象 ? exports是module.exports的别名,即:
?所以下面两种写法的效果是一样的:
在定义模块时: 如果直接给exports对象赋值(例如:exports={a:1,b:2}),此时,exports就不会再指向module.exports,而转而指向这个新对象,此时,exports与module.exports不是同一个对象。 7.npm和包和模块?7.1 npm
当我们谈到npm时,我们在说两个东西:
?7.2 npm集中管理包问:在浏览器中是如何使用第三方的工具库,例如:jQuery, bootStrap,echarts.js.... 答:从各自的官网上下载。 问:有没有一个想法:在一个地方下载所有的库(模块.....) 答:通过npm去下载。 npm网站上去下载我们的需要的代码时,它们是以"包"这种结构放在npm网站上的。先来了解下包和模块的关系。 ?
?8.npm下载使用包? ?8.1?分成三步
************?上述操作确保是联网状态****************? ? ?8.2 第一步:初始化项目????????这里提到的项目并不是某个具体的功能,只是要创建一个空文件夹即可(注意,不要起中文名字哈)。 ????????进入到项目所在的根目录下,启动小黑窗(按下shift键,点击右键,在弹出的菜单中选择 “在此处打开命令行”) 输入如下命令:
init命令用来在根目录下生成一个package.json文件,这个文件中记录了我们当前项目的基本信息,它是一切工作的开始。 ?8.3 第二步:安装包生成了package.json文件之后,我们就可以来安装第三方包了。在npm官网中,有上百万个包,供我们使用(你需要在npm网上注册帐号,登陆上去,才可以看到如下的数据,如果只是下载安装包,则并不需要注册)。 ?根据我们遇到的实际问题,我们来引入相应的包来解决它们。例如,我们在开发一个项目,其中涉及一些对日期时间的处理可以安装dayjs包。 ? 8.4 第三步:使用包当我们已经下载好一个包之后,就可以像使用核心模块一样去使用它。 格式是: 这个格式与引入核心模块的格式是一样的。
9. npm init 命令在某个目录下开启小黑窗,输入如下命令:
它会启动一个交互式的程序,让你填入一些关于本项目的信息,最后生成package.json文件。 如果你希望直接采用默认信息,可以使用:
说明:
10. package.json文件它一般是由npm init命令创建出来的,它的整体内容是一个json字符串,用来对当前项目进行整体描述。其中最外层可以看作是一个js的对象(每一个属性名都加了"",这就是一个典型的json标记)。这个文件中有非常多的内容,我们目前学习如下几个:
其它可参考 1.package.json文件 -- JavaScript 标准参考教程(alpha) 11. node_modules文件夹? ?13.1 作用? ? ?在使用npm install 命令时,会从npm网站下载对应的包到这个文件夹中,这个文件夹中保存着? 我们从npm中下载来的第三方包。 ? ?13.2 执行逻辑当键入
说明:
12.包的分类?13. 安装全局包和项目包我们通过 分成两类:
项目安装(或者叫本地安装),包安装在当前项目的根目录下(与package.json同级)的node_modules中。
13.1 全局包与项目包的区别
一个经验法则:
14. 全局安装nrm包? ?14.1 目标????????理解nrm的功能,会使用它来调整npm镜像 ? ?14.2 作用? ? ? ? nrm 这个工具是帮助我们切换npm镜像源的。 之前是:
使用nrm之后,就可以简化上面的命令。 ? ?14.3 步骤共三步
********************************************************************************************************** 如果nrm ls不能用,请看这里: const NRMRC = path.join(process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME'], '.nrmrc'); //const NRMRC = path.join(process.env.HOME, '.nrmrc');(注掉)const NRMRC = path.join(process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME'], '.nrmrc'); ********************************************************************************************************? 附: npm常用命令
如果你不想用
? ? ? 本人初学前端,还是菜鸟一枚......上述是个人学习总结,可能并不全面,后续还会继续补充? |
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/28 11:47:49- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |