模块(包)node
传统引入 js 的缺点jquery
整个网页,咱们写了一个 js 文件,全部的特效都在里面webpack
耦合度过高,代码之间关联性太强,不便于后期维护ios
变量容易 全局污染web
若是将 复杂的 js 文件,拆成多个功能的 js 文件npm
缺点:json
发生的请求过多,依赖模糊,难于维护gulp
这是传统的开发模式,都被抛弃掉了axios
因此咱们使用 模块化的开发模式浏览器
为何使用模块化
减小代码之间的关联度
部署方便
更好的进行分离,按需加载,避免了命名冲突,容易维护
什么是模块化
node 自带的规范(模块) commonjs 规范
node -v 检测 mode 版本
node 是 JavaScript 的环境,在 node 里面能够运行 js 文件,干服务器 指令: node 文件名
commonjs 模块,是 node 的规范运行,在服务端,不是浏览器端,若是使用在浏览器端,须要使用对该文件进行打包编译(借鉴工具 browserify webpack gulp 等)
暴露的本质是对象
每一个 js 文件,都必须对外暴露接口
书写模块的时候,对外暴露接口,modele.exports={} 或 exports.xxx=
引入模块 require() 参数:路径 路径注意 :若是是当前文件,前面必须加 ./ 。若是只写了文件名,则是在node_modules文件下
commonjs 暴露的本质是一个角 exports 的对象
module.exports={} 和 exports.xxx= 的区别?
两者暴露本质是同样的,都是暴露一个 exports 对象 前者会将原有的 exports 的内存地址覆盖,后者会在原有的 exports 的基础上进行添加
commonjs 是同步加载,是 node 的规范,同步加载在浏览器是一个大坑,只要一个环节卡住了,后面的就无法执行,因此不建议使用,若是非要使用,要须要编辑打包
对于 web 端,每一个 js 都是一模块,每一个模块都必须暴露一个接口,每一个 js 文件,有一个全局 require() 方法,用来引入模块
模块:
1.node 自带的包(模块), path url fs
2.第三方模块 weui / jquery / axios / zepto
3.自定义模块:咱们写的
配置模块说明文件,npm iinit 就会生成一个包 package.json 的文件
version:版本号
desciption:说明
main:index.js 文件 咱们主文件 index.js 文件,剩下的都是子模块
在浏览器说 require :is not defined
说明浏览器不支持 commonjs,须要借鉴打包工具
1.browserify
npm(全称为:node package manager)翻译过来为 node 模块包管理工具
node 自带的集成环境
对 npm 包管理工具的增删查改
下载:
npm install -g jquery --save(生产环境) -g(表明全局下载,不然表明当前目录)
删除:
npm uninstall jquery
查找:
npm search jquery
修改:
npm update jquery
对于咱们开发者来讲,只须要一个下载就能够了,删除的话,咱们能够直接删除文件
www.npmjs.com 包管理工具的官方网站
下载的存放位置
全局下载,在任何一个文件下都能使用这个包,(在计算机的任何位置使用)
局部下载,智能在当前目录下使用
可是 npm 是国外的网站,因此下载会很慢,咱们能够安装淘宝 npm 镜像 (称为:cnpm )
配置:npm install -g cnpm --registry=https://registry.npm.taobao.org
案例:
全局安装:jQuery(不推荐,可能不生效)
国内 cnpm install -g jquery --save
国外 npm install -g jquery --save
终止程序:ctrl+c
局部安装:npm install jquery --save 就会在目录生成一个 node_modules 的文件夹
文件下:var $=require("jquery")
当前文件要加./ , 没有 ./ 的话,默认在 node_modules 里面找
index.js 是这个包的输出文件,即使删除了package.json 只要不改变 index.js 的文件名就没事,一旦改了就报错,是由于包的输出文件是 index.js
npm install jquery --save (这个是下载运行环境(生产环境)的包) 好比 jQuery swiper
npm install browserify --save-dev (这个是下载开发环境的包) 好比 npm browserify 上线不依赖他们
两者的区别?
前者 --save 是上线时,会被压缩的包,后者时 --save-dev 上线时被抛弃的包
dependecies:生产环境,依赖的包
devdependencies:开发环境,依赖的包
指定版本上线:
npm install jquery @3.2.1 --save (必填,生产环境)
删除:npm uninstall jquery (基本上不用,直接删除文件也能达到这样的效果)
在浏览器 不支持 require() 方法,须要 browserify 工具
1. npm install -g browserify
2.编译打包:
browserify 主文件>编译文件 (名字就能够) > 两侧不能出现空格,不然就会中文就会出现乱码
若是咱们拥有了 package.json 文件,可是他里面的文件丢失?
咱们能够用 npm i 指令在 npm 上下载回来 只下载 node_modules 的内容
npm 下载的操做 细节处理(重要 !),package.json 这样的配置应该属于局部(猜想。。。)
如 jQuery / swiper 这样的代码,缺乏他们 网页便运行不了,因此须要生产环境,且须要在局部配置操做,
像 npm / browserify 这样的代码,上线后便不须要了,因此这个是在开发环境, 因此在全局配置上会好一点,