node项目package.json

node项目package.json

示例(mercury-parser package.json):

{
  "name": "@postlight/mercury-parser",
  "version": "2.2.0",
  "description": "Mercury transforms web pages into clean text. Publishers and programmers use it to make the web make sense, and readers use it to read any web article comfortably.",
  "author": "Postlight <mercury@postlight.com>",
  "homepage": "https://mercury.postlight.com",
  "license": "MIT",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/postlight/mercury-parser.git"
  },
  "bugs": {
    "url": "https://github.com/postlight/mercury-parser/issues"
  },
  "keywords": [
    "mercury",
    "parser",
    "reader",
    "web",
    "content"
  ],
  "files": [
    "dist",
    "cli.js",
    "src/shims/"
  ],
  "main": "./dist/mercury.js",
  "bin": {
    "mercury-parser": "./cli.js"
  },
  "scripts": {
    "lint": "eslint . --fix",
    "lint:ci": "remark . && eslint .",
    "lint-fix-quiet": "eslint --fix --quiet",
    "build": "yarn lint && rollup -c && yarn test:build",
    "build:ci": "rollup -c && yarn test:build",
    "build:web": "yarn lint && rollup -c rollup.config.web.js && yarn test:build:web",
    "build:web:ci": "rollup -c rollup.config.web.js && yarn test:build:web",
    "release": "yarn build && yarn build:web",
    "build:generator": "rollup -c scripts/rollup.config.js",
    "test_build": "rollup -c",
    "test": "yarn test:node && yarn test:web",
    "test:node": "jest --json --outputFile test-output.json",
    "test:web": "node ./node_modules/karma/bin/karma start karma.conf.js --auto-watch",
    "test:build": "cd ./scripts && jest check-build.test.js",
    "test:build:web": "node ./scripts/proxy-browser-test.js",
    "watch:test": "jest --watch",
    "generate-parser": "node ./dist/generate-custom-parser.js"
  },
  "engines": {
    "node": ">=8.10"
  },
  "devDependencies": {
    "@babel/core": "^7.0.0",
    "@babel/plugin-transform-runtime": "^7.0.0",
    "@babel/polyfill": "^7.0.0",
    "@babel/preset-env": "^7.0.0",
    "@babel/runtime": "^7.0.0",
    "@jesses/circle-github-bot": "^2.1.0",
    "@octokit/rest": "^16.9.0",
    "babel-core": "^7.0.0-bridge.0",
    "babel-eslint": "^10.0.1",
    "babel-jest": "^23.4.2",
    "babel-plugin-module-alias": "^1.6.0",
    "babel-plugin-module-resolver": "^3.1.2",
    "babelify": "^10.0.0",
    "babelrc-rollup": "^3.0.0",
    "brfs": "^2.0.1",
    "brfs-babel": "^2.0.0",
    "browserify": "^16.2.3",
    "changelog-maker": "^2.3.0",
    "eslint": "^5.12.0",
    "eslint-config-airbnb": "^17.1.0",
    "eslint-config-prettier": "^6.1.0",
    "eslint-import-resolver-babel-module": "^2.2.1",
    "eslint-plugin-babel": "^5.3.0",
    "eslint-plugin-import": "^2.14.0",
    "eslint-plugin-jsx-a11y": "^6.1.2",
    "eslint-plugin-react": "^7.12.3",
    "express": "^4.16.4",
    "husky": "^3.0.0",
    "inquirer": "^7.0.0",
    "jasmine-core": "^2.5.2",
    "jest": "^23.6.0",
    "jest-cli": "^23.6.0",
    "karma": "^3.1.4",
    "karma-browserify": "^6.0.0",
    "karma-chrome-launcher": "^3.0.0",
    "karma-cli": "^2.0.0",
    "karma-jasmine": "^1.0.2",
    "karma-mocha": "^1.3.0",
    "karma-requirejs": "^1.1.0",
    "lint-staged": "^8.1.0",
    "mocha": "^6.0.0",
    "nock": "^10.0.6",
    "ora": "^3.0.0",
    "prettier": "^1.15.3",
    "remark-cli": "^7.0.0",
    "remark-lint": "^6.0.4",
    "remark-preset-lint-recommended": "^3.0.2",
    "requirejs": "^2.3.6",
    "rollup": "^1.1.0",
    "rollup-plugin-babel": "^4.0.1",
    "rollup-plugin-commonjs": "^9.2.0",
    "rollup-plugin-node-globals": "^1.4.0",
    "rollup-plugin-node-resolve": "^2.0.0",
    "rollup-plugin-uglify": "^6.0.1",
    "watchify": "^3.11.1"
  },
  "dependencies": {
    "@babel/runtime-corejs2": "^7.2.0",
    "@postlight/ci-failed-test-reporter": "^1.0",
    "browser-request": "github:postlight/browser-request#feat-add-headers-to-response",
    "cheerio": "^0.22.0",
    "difflib": "github:postlight/difflib.js",
    "ellipsize": "0.1.0",
    "iconv-lite": "0.5.0",
    "jquery": "^3.4.1",
    "moment": "^2.23.0",
    "moment-parseformat": "3.0.0",
    "moment-timezone": "0.5.26",
    "postman-request": "^2.88.1-postman.7.1",
    "request-promise": "^4.2.2",
    "string-direction": "^0.1.2",
    "turndown": "^5.0.3",
    "url": "^0.11.0",
    "valid-url": "^1.0.9",
    "wuzzy": "^0.1.4",
    "yargs-parser": "^13.0.0"
  },
  "bundleDependencies": [
    "jquery",
    "moment-timezone",
    "browser-request"
  ],
  "browser": {
    "main": "./dist/mercury.web.js",
    "cheerio": "./src/shims/cheerio-query",
    "jquery": "./node_modules/jquery/dist/jquery.min.js",
    "postman-request": "browser-request",
    "iconv-lite": "./src/shims/iconv-lite",
    "moment-timezone": "./node_modules/moment-timezone/builds/moment-timezone-with-data-2012-2022.min.js"
  },
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  },
  "lint-staged": {
    "*.js": [
      "eslint --fix",
      "prettier --write",
      "git add"
    ],
    "*.{json,css,md}": [
      "remark .",
      "prettier --write",
      "git add"
    ]
  },
  "greenkeeper": {
    "ignore": [
      "jasmine-core",
      "karma-jasmine",
      "rollup-plugin-node-resolve",
      "eslint-import-resolver-babel-module",
      "jest",
      "jest-cli",
      "babel-jest",
      "karma"
    ]
  },
  "__npminstall_done": "Tue Jun 30 2020 11:36:49 GMT+0800 (GMT+08:00)",
  "_from": "@postlight/mercury-parser@2.2.0",
  "_resolved": "https://registry.npm.taobao.org/@postlight/mercury-parser/download/@postlight/mercury-parser-2.2.0.tgz"
}

介绍

package.json 是npm init命令初始化后,在项目的根目录下自动生成的配置文件,它定义了这个项目的配置信息(比如名称、版本、许可证等元数据)以及所需要的各种模块。npm install命令根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境。

字段含义

1.name

package的名称。不过需要注意的是,name有长度限制(虽然一般都不会超),而且name不能以 【点】 或者 【下划线】开头,name中不能有大写字母。这个是每一个package必须的。在业务代码中,通过require(${name})就可以引入对应的程序包了。

2.version

package的版本。对于业务项目来说,这个往往不太重要,但是如果你要发布自己的项目,这个就显得十分重要了。name和version共同决定了唯一一份代码。npm是用[npm-semver来解析版本号的。我们一般见到的都是大版本.次要版本.小版本这种版本号,比如16.1.0。

3.description

包的描述。开发组件库时必需,简明的向库的使用者介绍这个库是干嘛的。对于公司的业务项目,这个配置项一般无所谓。

4.author

项目的作者。可以为字符串,对象。

5.homepage

项目主页。对于开发组件库来说挺有用的。

6.license

开源协议。对于开源组件库,这个十分重要。

7.repository

对于组件库很有用。让组件库使用者找到你的代码库地址。这个配置项会直接在组件库的npm首页生效

8.bugs

开发者的联系方式,代码库的issues地址等。如果代码使用者发现了bug,可以通过这个配置项找到提bug的地方。

9.keywords

关键词。一个字符串数组,对这个npm包的介绍。组件库必需,便于使用者在npm中搜索。对于公司业务项目,这个配置一般无所谓。

10.files

数组。表示代码包下载安装完成时包括的所有文件。

11.main

代码入口。这个十分重要,特别是对于组件库。当你想在node_modules中修改你使用的某个组件库的代码时,首先在node_modules中找到这个组件库,第一眼就是要看这个main,找到组件库的入口文件。在这个入口文件中再去修改代码吧。

browser 环境和 node 环境均可使用。

模块引入方法require()在引入包时,会优先检查这个字段,并将其作为包中其余模块的入口。如果不存在这个字段,require()方法会查找包目录下的 index.js , index.node , index.json 文件作为默认入口。

12.bin

用来指定各个内部命令对应的可执行文件的路径。

一些包作者希望包可以作为命令行工具使用。配置好bin字段后,通过npm install package_name -g命令可以将脚本添加到执行路径中,之后可以在命令行中直接执行。通过-g命令安装的模块包称为全局模式。

13.scripts

指定了运行脚本命令的npm命令行缩写。十分重要。

脚本说明对象。它主要被包管理器用来安装,编译,测试和卸载包。

a.代码示例:

			"scripts": {
			   "dev": "NODE_ENV=dev webpack-dev-server --progress --hot --host 0.0.0.0 --port 8089",
			  "test": "NODE_ENV=test webpack --config webpack.test.config.js --progress",
			 "online": "NODE_ENV=production webpack --config webpack.online.config.js --progress",
			  "build": "webpack",
			  "node": "node server.js"
			},

b.具体解释:

在命令行输入:npm run dev , 对应的命令就会被执行。这里有一个地方需要注意,当执行npm run xxx 的时候,node_modules/.bin/目录会在运行时被加入系统的PATH变量。

上面的例子,当我们在命令行输入:npm run build时,其实真正执行的命令是node_modules/.bin/webpack而不是webpack。所以,当你的webpack并未全局安装时,直接在命令行输入:webpack是会报错的。因为你的webapck是安装在node_modules/.bin/下面的。

14.engines

指定项目所依赖的node环境、npm版本等。

15.devDependencies

项目的依赖。通过npm run install --save-dev安装的包会出现在这里。主要是在开发过程中依赖的一些工具。用法与dependencies相似

16.dependencies

项目的依赖。通过npm install --save安装的包会出现在这里。注意,不要把测试工具、代码转换器或者打包工具等放在这里。当你在命令行里面使用npm install react --save时,react就会出现在dependencies。默认是安装最新的版本。如果想安装某个特定的版本,可以npm install react@15.6.2。

a.以下的dependencies,格式都是合法的:

			"dependencies" : { 
				 "foo" : "1.0.0 - 2.9999.9999",
				 "bar" : ">=1.0.2 <2.1.2",
				  "baz" : ">1.0.2 <=2.3.4",
				  "boo" : "2.0.1",
				 "qux" : "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0",
				  "asd" : "http://asdf.com/asdf.tar.gz",
				  "til" : "~1.2",
				  "elf" : "~1.2.3",
				  "two" : "2.x",
				 "thr" : "3.3.x",
				 "lat" : "latest",
				  "dyl" : "file:../dyl"
			}

b.常见的dependencies:

			"dependencies": {
				  "foo": "1.0.0", // 指定了就是1.0.0版本
				  "bar": "~1.2.2", // 安装版本号不低于1.2.2的1.2.x的最新版本,例如:1.2.3, 1.2.4等等。1.2.1 ,1.3.x 等就不行了
				 "baz": "ˆ1.2.2", // 安装版本号不低于1.2.2的1.x.x的最新版本,例如: 1.2.7,1.3.1,1.7.8等。1.2.1 ,2.0.0 等就不行了。注意,如果配置是^0.x.x,则和~0.x.x的效果一样。                
				 "lat": "latest"  // 安装最新版本
			}

c.dependencies 还可以像下面这样配置:

			"dependencies": {
				 "foo": "git+ssh://git@github.com:foo/foo.git#v1.0.1",
			}

foo组件的地址为git+ssh://{foo代码库的ssh地址}#v{foo的版本号}

这样的配置在下面这种场景十分有用:

dependencies还有其他的配置方式:组内的许多项目都有同一个功能,把这个功能抽出来做成组件是很自然的想法。但是每个项目都有自己的代码库,公司也没有内部的npm库,组件应该放在哪里呢?可以专门为组件新建一个代码仓库,将组件放在这里开发、迭代。这样,各个项目都可以引用该组件:只需要在dependencies中将组件配置成上述的形式。至于组件的版本,可以通过git tag来控制。

17.bundleDependencies

数组,打包时的依赖。如果配置了bundledDependencies,在项目中执行 npm pack将项目打包时,最后生成的.tgz包中,会包含bundledDependencies中配置的依赖。bundledDependencies中的依赖必须在devDependencies或者dependencies中声明过。

18.browser

定义 npm 包在 browser 环境下的入口文件。

19.husky

husky 其实就是一个为 git 客户端增加 hook 的工具。将其安装到所在仓库的过程中它会自动在 .git/ 目录下增加相应的钩子实现在 pre-commit 阶段就执行一系列流程保证每一个 commit 的正确性。部分在 cd commit stage 执行的命令可以挪动到本地执行,比如 lint 检查、比如单元测试。当然,pre-commit 阶段执行的命令当然要保证其速度不要太慢,每次 commit 都等很久也不是什么好的体验

20.lint-staged

lint-staged 是一个在git暂存文件上运行linters的工具,当然如果你觉得每次修改一个文件就给所有文件执行一次lint检查不恶心的话,这个工具对你来说就没有什么意义了,请直接关闭即可。

21.greenkeeper

22.__npminstall_done

23._from

24._resolved

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值