一.终端常用的命令
1.初始化项目命令:
npm init -y //它会多一个package.json文件,里面包含项目的信息和模块的信息.
2.安装模块:
cnpm install 模块名1 模块名2 --save
简写方式:
cnpm i 模块名1 模块名2 --save
3.根据配置文件安装模块
cnpm install //装了之后会自动多一个node_modules文件夹
二.自己写一个模块
1.什么是模块?什么是模块化?
名词解释:
模块:一个或者一类功能的集合;
模块化:把常用的,或者公共的部分,进行封装,抽取为模块;
2.浏览器端的js和node.js服务器端的js的区别是什么?
2.1浏览器端的js,一个页面中的所有js文件作用域都是同一个,所以需要使用自执行函数进行包裹;
2.2服务器端的js,每个文件都有自己独立的作用域,可以理解为一个新建一个js文件就会帮我们自执行函数包裹了一次,如果要让外部访问到,就要将自己暴露出去.
3.为什么要暴露模块?因为作用域的限制,你不暴露,别人就无法访问!
下面是浏览器端的暴露实例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
</body>
</html>
<script>
//自执行函数
// (function(){
// function sayHi1(){
// console.log("你好吗?");
// }
// })()
// sayHi1();//报错,因为这个方法只有在自执行函数的作用域才生效,外部无法访问
//--------------------------------------------------------------------------------------------------------
// 如果要访问,可以这么做
//自执行函数
/* (function(w){//形参
function sayHi(){
console.log("我是一个函数");
}
//相当于给window加上这个函数
w.sayHi=sayHi
})(window)//传递一个实参(实参和形参的区别,谁传递真正的值,谁就是实参;谁接收这个值,谁就是形参,形参可以自己取名字)
// 外部调用
sayHi(); //成功调用,因为作用域已经暴露出来,外面可以正常访问*/
//--------------------------------------------------------------------------------------------------------
// 如果有多个函数,可以这么写
//1.自执行函数
(function(w){//w是形参,可以自己取名
function sayHi(){
console.log("hi");
};
function sayHello(){
console.log("hello");
};
w.fn={//相当于给window添加fn属性,等于对象,对象里保存两个函数
sayHi,
sayHello
}
})(window)//这个window是实参
//2.函数外面调用
window.fn.sayHi();
window.fn.sayHello();
</script>
下面是服务器端(使用的是node终端)的暴露实例: