为何引入 npm 包 咱们能引入直接使用

在使用 npm 包的时候我很好奇一件事情, 为何咱们 npm install 到 node_module 以后咱们能直接 var bar = require('bar')

咱们使用的是 CommonJS 模块化 规范 目录结构javascript

--demo
        --node_module  //能够手动建立文件夹
            --bar.js
        --demo.js
复制代码

bar.jsjava

var str = {
        str: '我是在 node_module 下bar.js'
    }
    exports.str = str // 必须用模块化标准 导出来
复制代码

demo.jsnode

var str = require('bar')  //后缀名能够省略
    console.log(str)    // { str: { str: '我是在 node_module 下bar.js' } }
复制代码

数据的结果是 { str: { str: '我是在 node_module 下bar.js' } }npm

这样咱们 用的时候就须要 str.str 这样就很不友好了。json

咱们换一种导出的方法

bar.js模块化

var str = {
        str: '我是在 node_module 下bar.js'
    }
    module.exports = str // 必须用模块化标准 导出来
复制代码

你们能够了解一下 模块化 导出 引入的一些细节ui

初步的咱们已经能实现了 若是咱们改变一下目录结构

--demo
        --node_module  //能够手动建立文件夹
            --bar
                --bar.js
        --demo.js
复制代码

demo.js 引入的时候也要相应作一下处理spa

var str = require('bar/bar')  //后缀名能够省略
    console.log(str)    // { str: { str: '我是在 node_module 下bar.js' } }
复制代码

这好像也不是咱们要的效果,重要的步骤要来了code

咱们要在 node_module 下边的 bar 文件夹下边 建立一个 package.json 文件ip

执行 npm init -y 表示不须要提示直接建立 package.json 文件

{
  "name": "bar",
  "version": "1.0.0",
  "description": "",
  "main": "bar.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}
复制代码

注意 咱们 入口 main 已经指定了文件夹了

因此咱们在用的时候就能实现

var str = require('bar')  //后缀名能够省略
    console.log(str)    // { str: { str: '我是在 node_module 下bar.js' } }
复制代码
相关文章
相关标签/搜索