bin

{
  "bin": {
    "gh-pages": "bin/gh-pages.js",
  }
}

包里面的bin字段相当于在说:“嗨npm,如果待会儿有人执行gh-pages这个命令,就去我目录下找bin/gh-pages.js这个文件”。

scripts

{
  "dependencies": {
    "gh-pages": "^6.1.1"
  },
  "scripts": {
    "deploy": "gh-pages -d dist"
  }
}

针对上面的package.json内容,当我们执行npm run deploy时,实际执行的目标是什么?

我们来到gh-pages的目录结构
image.png

然后打开package.json文件,找到bin属性。

image.png

于是我们看到了gh-pages属性,对应的属性值就是npm run deploy执行的目标,也就是bin/gh-pages.js这个文件。

main

当该项目是一个npm包时,main指定的文件,将会被作为包的入口。

// craco-less的package.json
{
  "main": "./lib/craco-less.js"
}
// index.js
const CracoLessPlugin = require('craco-less');

上面的require('craco-less')所访问的就是node_modues/craco-less里的./lib/craco-less.js文件。

module

前置知识:
CommonJS:使用exports导出的模块

var add = function(x, y) {
    return a + y;
}

exports.add = add

ESM:使用export导出的模块

var add = function(x, y) {
    return a + y;
}

export {
  add
};

当打包工具遇到一个npm包,会尝试识别package.json中的module字段,如果支持,则会优先使用module指向的文件,否则就使用main字段指向的文件。

{
  "main": "./CommonJS.js",
  "module": "./ESM.js"
}

资料:
https://maimai.cn/article/detail?fid=1751256976&efid=BKFBo9Re...


热饭班长
3.7k 声望434 粉丝

先去做,做出一坨狗屎,再改进。


引用和评论

0 条评论