1.Node.js中,一个JavaScript文件中定义的变量、函数,都只在这个文件内部有效。例如下图中,foo.js中定义的变量仅仅能够在当前文件中访问。
当需要从此JS文件外部(例如上图中06.js)引用这些变量、函数时,必须使用exports对象进行暴露。使用者要用require()命令引用这个JS文件。这个就是node.js 遵循的common js规范。(其中,foo.js中8.9.10行中的exports ,可以改为module.exports效果是一样的。
看上述图片和运行结果,就能了解使用规则。
2.看懂了上面的案例后,我们进一步引申,看下面代码
people.js文件中通过module.exports一个构造方法,就可以在05.js文件中引用了,就可以完成对所暴露出来的构造方法进行实例化。
3. 进步一扩展,我们通过上述可以看到,05.js 或者06.js 都引用了一个相对路径 ,require('./test/People.js')和require(‘./test/foo.js) ,如果我们不写相对路径的话呢,只写成
require('People.js')和require('foo.js')会怎样呢,看下面代码:
那就需要把foo.js放到node_modules文件加中,可以看到控制台中结果完全正确,代码运行过程中,会自动往当前同级别node_modules文件加中去找并加载,如果没有node_modules文件中,就会往上层目录中去找node_modules文件加,以此找下去。
4.看懂上述后,进一步扩展,如果,require('People.js')和require('foo.js')中,改为require('People')和require('foo') 那么,这样改怎么找呢
如上图就会把bar 当成一个文件夹,去该文件夹下去找index.js,如果找不到index.js就会报错。当然这也并不很绝对,如果该文件夹下有package.json文件,就会其中找main对应的js文件
5.上面内容是不是解答了你的很多疑惑呢。有了上面的基础,我们说一下npm
这是在npm上随便找的一个包,那么按照所给出的命令进行 安装 npm install dateformat
进行第一步安装之后,第二步在左边目录中自动生成一个node_modules文件夹,然后下面自动生成dateformat模块,第三步引用,第四步生成代码。但是我们在开发过程中,
还要在cmd 中进行npm init操作。如下图所示
上面进行npm init 安装时候,会自动成成package.json文件。引文node_modules文件夹中已经有dateformat文件夹了,所以,package.json文件夹中dependencies中,会有dateformat内容。如果今后再次安装相关包,可以通过npm install *** --save 进行安装,那么dependencies中就会包含该安装包,这样有个什么用呢?
如果你把node_modules文件夹删除(因为,拷贝项目给别人时候,没必要把这个包拷过去),你只要保留最外层的package.json文件夹,(也就是通过npm init时候自动生成的那个package.json)那么,通过命令npm install 命令就会生成node_modules文件夹以及下面各种安装包。