Giter Club home page Giter Club logo

read-package-json's Introduction

read-package-json

Note

This repo has been archived. Please use npm/package-json instead.

This is the thing that npm uses to read package.json files. It validates some stuff, and loads some default things.

It keeps a cache of the files you've read, so that you don't end up reading the same package.json file multiple times.

Note that if you just want to see what's literally in the package.json file, you can usually do var data = require('some-module/package.json').

This module is basically only needed by npm, but it's handy to see what npm will see when it looks at your package.

Usage

var readJson = require('read-package-json')

// readJson(filename, [logFunction=noop], [strict=false], cb)
readJson('/path/to/package.json', console.error, false, function (er, data) {
  if (er) {
    console.error("There was an error reading the file")
    return
  }

  console.error('the package data is', data)
});

readJson(file, [logFn = noop], [strict = false], cb)

  • file {String} The path to the package.json file
  • logFn {Function} Function to handle logging. Defaults to a noop.
  • strict {Boolean} True to enforce SemVer 2.0 version strings, and other strict requirements.
  • cb {Function} Gets called with (er, data), as is The Node Way.

Reads the JSON file and does the things.

package.json Fields

See man 5 package.json or npm help json.

readJson.log

By default this is a reference to the npmlog module. But if that module can't be found, then it'll be set to just a dummy thing that does nothing.

Replace with your own {log,warn,error} object for fun loggy time.

readJson.extras(file, data, cb)

Run all the extra stuff relative to the file, with the parsed data.

Modifies the data as it does stuff. Calls the cb when it's done.

readJson.extraSet = [fn, fn, ...]

Array of functions that are called by extras. Each one receives the arguments fn(file, data, cb) and is expected to call cb(er, data) when done or when an error occurs.

Order is indeterminate, so each function should be completely independent.

Mix and match!

Other Relevant Files Besides package.json

Some other files have an effect on the resulting data object, in the following ways:

README?(.*)

If there is a README or README.* file present, then npm will attach a readme field to the data with the contents of this file.

Owing to the fact that roughly 100% of existing node modules have Markdown README files, it will generally be assumed to be Markdown, regardless of the extension. Please plan accordingly.

server.js

If there is a server.js file, and there is not already a scripts.start field, then scripts.start will be set to node server.js.

AUTHORS

If there is not already a contributors field, then the contributors field will be set to the contents of the AUTHORS file, split by lines, and parsed.

bindings.gyp

If a bindings.gyp file exists, and there is not already a scripts.install field, then the scripts.install field will be set to node-gyp rebuild.

index.js

If the json file does not exist, but there is a index.js file present instead, and that file has a package comment, then it will try to parse the package comment, and use that as the data instead.

A package comment looks like this:

/**package
 * { "name": "my-bare-module"
 * , "version": "1.2.3"
 * , "description": "etc...." }
 **/

// or...

/**package
{ "name": "my-bare-module"
, "version": "1.2.3"
, "description": "etc...." }
**/

The important thing is that it starts with /**package, and ends with **/. If the package.json file exists, then the index.js is not parsed.

{directories.man}/*.[0-9]

If there is not already a man field defined as an array of files or a single file, and there is a directories.man field defined, then that directory will be searched for manpages.

Any valid manpages found in that directory will be assigned to the man array, and installed in the appropriate man directory at package install time, when installed globally on a Unix system.

{directories.bin}/*

If there is not already a bin field defined as a string filename or a hash of <name> : <filename> pairs, then the directories.bin directory will be searched and all the files within it will be linked as executables at install time.

When installing locally, npm links bins into node_modules/.bin, which is in the PATH environ when npm runs scripts. When installing globally, they are linked into {prefix}/bin, which is presumably in the PATH environment variable.

types field

If you do not have a types field, then it will check if a corresponding *.d.ts file exists for your package entry file and add it to the package.json.

read-package-json's People

Contributors

aaronj1335 avatar antongolub avatar artemv avatar boriskozo avatar cioddi avatar daniel-santos avatar darcyclarke avatar dependabot[bot] avatar fat avatar github-actions[bot] avatar iarna avatar isaacs avatar kenany avatar kevintcoughlin avatar lukekarrys avatar mikegerwitz avatar mikesherov avatar mjomble avatar myrne avatar nicks avatar othiym23 avatar paulirish avatar rentzsch avatar robertkowalski avatar smikes avatar thefourtheye avatar wraithgar avatar zkat avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

read-package-json's Issues

logging warnings

This module shouldn't log to stderr. We could have it return an array of warnings and then the module calling this module could do the logging.

[BUG] in package.json scripts on Windows, \n gobbles the rest of the script

What / Why

In an npm package.json script on Windows, \n gobbles the rest of the command.

When

  • A package.json script contains \n

Where

  • npm scripts declared in package.json

My environment is:

  • Windows PowerShell 5.1.18362.752
  • npm 6.14.6
  • node v12.18.4

How

Current Behavior

Everything until the \n is executed. Everything after the \n is ignored.

Steps to Reproduce

In package.json:

{
  "scripts": {
    "bad": "echo a\nb && echo c"
  }
}

In Windows Powershell:

npm run bad

Output (note that everything except the last line is a reprint of the command, so really the command's output is just "a"):


> [email protected] bad C:\My\Location
> echo a
b && echo c

a

Expected Behavior

\n is a common sequence when writing scripts for Mac or Linux, so I expect it not to break unrelated parts of the script when running on Windows. \n could be treated literally, which is the normal PowerShell behavior, or it could be treated like the empty string, `n (the Powershell newline sequence), or n.

Who

  • n/a

References

  • May be a bug in npm/run-script, rather than a bug in npm/read-package-json. I have cross-posted there.

make name / version optional

For projects that won't be published as npm modules, but that instead use npm only as a means for installing local dependencies (think of the package.json in this case like a Gemfile) the currently required name and version fields are unnecessary. It would be great if they were optional.

Error: Cannot find module 'slide'

I've done npm install read-package-json I've tried to use it and immediately got following error:

module.js:337
    throw new Error("Cannot find module '" + request + "'");
          ^
Error: Cannot find module 'slide'
    at Function._resolveFilename (module.js:337:11)
    at Function._load (module.js:279:25)
    at Module.require (module.js:359:17)
    at require (module.js:375:17)
    at Object.<anonymous> (/Users/medikoo/Projects/_tests/node_modules/read-package-json/read-json.js:27:13)
    at Module._compile (module.js:446:26)
    at Object..js (module.js:464:10)
    at Module.load (module.js:353:31)
    at Function._load (module.js:311:12)
    at Module.require (module.js:359:17)

OSX, Node v0.6.18

Missing license

Please add a license file to clarify what license this is distributed under.

I'd like to use node/npm for a project at work, but npm depends on this package and I'm not allowed to use software that doesn't have a clear license.

Thanks!

[BUG] too slow

What / Why

This module is too slow. It does too much stuff, and much of it is unnecessary or inefficient.

When

Running npm ls in a project with 2000 or more deps.

Current Behavior

  • It takes a really long time.

Expected Behavior

  • It should not take a really long time.

Who

  • @npm/cli-team

Proposal

Here's what it does today:

  • If the package.json file can't be found, look for a magic comment in an index.js file instead.
  • bundleDependencies - normalize the bundledDependencies/bundleDependencies key and value (this is fast and worthwhile).
  • gypfile - glob for any file matching *.gyp, and if any are found, set data.gypfile = true and add an install script of node-gyp rebuild.
  • serverjs - glob for a file named server.js, and if found, set scripts.start to node server.js
  • scriptpath - strip ./node_modules/.bin from the start of any scripts
  • authors - Read a file named AUTHORS and add the contents to data.contributors
  • readme - Glob for a file named README.*. Save the file name as data.readmeFilename, and the data as data.readme.
  • mans - If there is a data.directories.man, then glob in it for files named *.[0-9] and add the list to data.man.
  • bins - Same as mans, but for data.directory.bin. Also turns "bin": [array, of, scripts] into a proper object.
  • githead - Read the file at .git/HEAD and save the shasum as data.githead.
  • assign data._id as the name@version
  • Make sure that all the bin references exist
  • call normalize-package-data on the data, which again fixes a couple of things on the list above, but mostly just enforces various data type constraints.

Here's what I intend to make it do:

  • Drop the indexjs stuff. It's dumb and no one uses it.
  • Keep the bundleDeps, script ./node_modules/.bin path checking, and other basic data-checking normalizing stuff, but refactor it so that it's not calling a bunch of functions with constructed strings, as that seems like it prevents some of v8's optimizations.
  • Drop githead entirely.
  • We should handle the directories.* stuff when installing and linking a package, not when reading the json. Drop it from here.
  • Drop all the readme/readmeFilename stuff.
  • Don't warn if a name/version/etc are missing. It's kind of noisy and annoying to be nagged about adding a version to a package that is never going to be published. We should just require that at publish time.

Just monkeypatching this module with something that does a simple JSON.parse(fs.readFile(..)) brought it from this:

$ time node ../npm/arborist/la.js .

real	0m2.081s
user	0m2.875s
sys	0m0.642s

to this:

$ time node ../npm/arborist/la.js .

real	0m0.649s
user	0m0.830s
sys	0m0.253s

(la.js is a script that loads an actual tree and prints it, but doesn't do anything else.)

Intercept NPM's reading of `package.json`

Is it possible to intercept the process by which NPM reads package.json so I can do some processing on it? I have some stuff I would like to try out with that, if it's possible. What I would like is to intercept commands like

$ npm run start

so I get the chance to do some processing on package.json before NPM sees the results.

Glob doesn't match "Readme.md"

On my system README files are ignored unless they are capitalized. For instance, when installing jade via npm:

npm WARN package.json [email protected] No README.md file found!

Jade's readme file is called Readme.md. As far as I can tell, the glob at read-json.js:231 should match this, but it doesn't. I'm not sure whether this is a bug in node-glob or in read-package-json.

(NPM version v1.1.16, read-package-json v0.1.5.)

Deprecate in favor of @npmcli/package-json

The functionality of this package has been moved to @npmcli/package-json as part of npm/package-json#32. We should consider deprecating and archiving this package after examining its use across the rest of our packages and the ecosystem.

Also any open issues and PRs should be triaged and moved to the other repo if appropriate.

Package readme is not being set, even though it exists in the directory.

I'm moving this from npm/npm#4585 to here because I think the issue might be within read-package-json.


NOTE: The readme is showing up right now on this package do to the globOpts.sync hack I describe below.


I have an NPM package (gulp-cdnizer) that I'm working on. If I don't manually include the readme property in my package.json, then I get "ERROR: No README data found!" for the readme data.

I'm not doing anything funny with the .npmignore, and I don't actually understand how this is supposed to work. I've manually updated the readme on the previous packages I've published, but in researching this, I realized I shouldn't have to do this.

Hopefully you can help.

versions:

node: 0.10.25
npm:  1.3.25
read-package-json: 1.1.6

[QUESTION] Version 2.1.1 dropped support for Node v4.x, is it expected?

What / Why

I 'm using the read-installed package with locked version 4.0.3, but read-installed itself don't has an package-lock.json(in version 4.0.3) and use read-package-json: ^2.0.0.

read-package-json version 2.1.1 add dep package npm-normalize-package-bin, there are object destructring syntax in it, which not supported by Node 4.x by default.

So my CI failed on Node 4.x due to the deps chain:

MyAppliation -> read-installed 4.0.3(locked) -> read-package-json ^2.0.0(no lock)

read-package-json 2.1.0 -> OK
read-package-json 2.1.1 -> npm-normalize-package-bin 1.0.0(locked) -> Fail

Question

Is this breaking change expected?

Can we make it 3.0.0?

Reporting a vulnerability

Hello!

I hope you are doing well!

We are a security research team. Our tool automatically detected a vulnerability in this repository. We want to disclose it responsibly. GitHub has a feature called Private vulnerability reporting, which enables security research to privately disclose a vulnerability. Unfortunately, it is not enabled for this repository.

Can you enable it, so that we can report it?

Thanks in advance!

PS: you can read about how to enable private vulnerability reporting here: https://docs.github.com/en/code-security/security-advisories/repository-security-advisories/configuring-private-vulnerability-reporting-for-a-repository

logger function in npmlog gets overwritten on npm install

Currently having a look on #28

When I run npm i ./foo to test normalize-package-data which can handle the scripts-property and is logging them, it turns out that the log function from package.json gets changed from addLocalDirectory before npm-log can log the log message.

path to package.json not reading correctly

Hi! I'm having an issue where the readJson method is not properly getting the right file path to my package.json. I have the following code:

const readJson = require('read-package-json');
const Promise = require('bluebird');

const readJSON = Promise.promisify(readJson);

readJSON('./package.json', console.error, true)
    .then(response => {
        console.log(response);
    }); 

While the code above works and returns my package.json as an object, the problem is that the actual file path to my package.json is in ('../package.json'). Additionally, I've also tried running this without promises. I'm not sure if this is something that you have built in, but it seemed strange that this method would work for the incorrect file path but then not work for the correct one. Let me know!

npm publish ignores gypfile:false if gyp file present

In my setup:

  • package.json has "gypfile": false
  • .npmignore has *.gyp in place

However when publishing, these lines https://github.com/npm/read-package-json/blob/master/read-json.js#L140-L153 will force gypfile to true and force-add an install script. This makes the project impossible to install.

The gyp file is present because it's a chromium project and I cannot remove it from the repo, but since i've blacklisted it in both the manifest and npmignore, i'd like to avoid this bit.

proposal: If data.gypfile is defined and false, can we honor that setting?

Extracted data-normalization code

As discussed, I put data-normalization code that I had extracted from read-package-json into a new module, now published as normalize-package-data. I updated my fork of read-package-json to use this new module. It now passes all tests (although README warning had to be adjusted slightly).

I don't think it's ready for pull yet, because I'm not fully convinced that functionality is totally equivalent (or better).

https://github.com/meryn/read-package-json

See https://npmjs.org/package/normalize-package-data .

[BUG] crashes on an invalid package.json

What / Why

Try to run this package.json through read-package-json: https://github.com/browserify/resolve/blob/main/test/resolver/invalid_main/package.json

It crashes, with TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received an instance of Array on the dirname call here.

To be clear, node crashes with the same error when trying to require this package fixture - but perhaps read-package-json should handle it a bit more gracefully?

In particular, it's not calling cb with an error - it's just throwing an uncaught error to the ether.

License parameter is never checked for SPDX validity

Hi there!

I thought I'd try my hand at doing some node stuff, and wanted to take a look at emitting a warn if the license parameter of the package.json is valid, as per the docs. I found an SPDX package already, so I'm now just working at it to see if I can get it to work.

Is this something that would be of interest? I realise modifying such a fundamental part of npm is maybe not the ideal thing for a beginner to do, but I figured it was quite small and self contained, so let me know.

Thanks, and thanks for the hard work on npm itself. It's very appreciated!

EDIT: I've heard on the nodeup podcast that SPDX validity checking happens elsewhere in npm 3, which I've not found, so I'll close this as handled elsewhere.

Tests fail

Using OSX. [email protected] [email protected]

$ npm t

> [email protected] test /Users/simen/Development/read-package-json
> standard && tap test/*.js

ok test/basic.js ...................................... 15/15
not ok test/bin.js ...................................... 2/7
    Command: "/Users/simen/.nvm/versions/node/v0.12.2/bin/node bin.js"
    TAP version 13
    not ok 1 should be equal
      ---
        file:   /Users/simen/Development/read-package-json/read-json.js
        line:   318
        column: 20
        stack:
          - |
            getCaller (/Users/simen/Development/read-package-json/node_modules/tap/lib/tap-assert.js:439:17)
          - |
            assert (/Users/simen/Development/read-package-json/node_modules/tap/lib/tap-assert.js:21:16)
          - |
            Function.equal (/Users/simen/Development/read-package-json/node_modules/tap/lib/tap-assert.js:163:10)
          - |
            Test._testAssert (/Users/simen/Development/read-package-json/node_modules/tap/lib/tap-test.js:87:16)
          - |
            /Users/simen/Development/read-package-json/test/bin.js:19:7
          - |
            /Users/simen/Development/read-package-json/read-json.js:345:5
          - |
            handleExists (/Users/simen/Development/read-package-json/read-json.js:318:20)
          - |
            FSReqWrap.cb [as oncomplete] (evalmachine.<anonymous>:226:19)
        found:  1
        wanted: 0
      ...
    ok 2 should be equivalent
    not ok 3 should be equal
      ---
        file:   /Users/simen/Development/read-package-json/read-json.js
        line:   318
        column: 20
        stack:
          - |
            getCaller (/Users/simen/Development/read-package-json/node_modules/tap/lib/tap-assert.js:439:17)
          - |
            assert (/Users/simen/Development/read-package-json/node_modules/tap/lib/tap-assert.js:21:16)
          - |
            Function.equal (/Users/simen/Development/read-package-json/node_modules/tap/lib/tap-assert.js:163:10)
          - |
            Test._testAssert (/Users/simen/Development/read-package-json/node_modules/tap/lib/tap-test.js:87:16)
          - |
            /Users/simen/Development/read-package-json/test/bin.js:29:7
          - |
            /Users/simen/Development/read-package-json/read-json.js:345:5
          - |
            handleExists (/Users/simen/Development/read-package-json/read-json.js:318:20)
          - |
            FSReqWrap.cb [as oncomplete] (evalmachine.<anonymous>:226:19)
        found:  2
        wanted: 1
      ...
    not ok 4 should be equal
      ---
        file:   /Users/simen/Development/read-package-json/read-json.js
        line:   318
        column: 20
        stack:
          - |
            getCaller (/Users/simen/Development/read-package-json/node_modules/tap/lib/tap-assert.js:439:17)
          - |
            assert (/Users/simen/Development/read-package-json/node_modules/tap/lib/tap-assert.js:21:16)
          - |
            Function.equal (/Users/simen/Development/read-package-json/node_modules/tap/lib/tap-assert.js:163:10)
          - |
            Test._testAssert (/Users/simen/Development/read-package-json/node_modules/tap/lib/tap-test.js:87:16)
          - |
            /Users/simen/Development/read-package-json/test/bin.js:30:7
          - |
            /Users/simen/Development/read-package-json/read-json.js:345:5
          - |
            handleExists (/Users/simen/Development/read-package-json/read-json.js:318:20)
          - |
            FSReqWrap.cb [as oncomplete] (evalmachine.<anonymous>:226:19)
        found:  No license field.
        wanted: No bin file found at ./bin/typo
        diff:   |
          FOUND:  No license field.
          WANTED: No bin file found at ./bin/typo
                     ^ (at position = 3)
      ...
    not ok 5 should be equal
      ---
        file:   /Users/simen/Development/read-package-json/read-json.js
        line:   313
        column: 25
        stack:
          - |
            getCaller (/Users/simen/Development/read-package-json/node_modules/tap/lib/tap-assert.js:439:17)
          - |
            assert (/Users/simen/Development/read-package-json/node_modules/tap/lib/tap-assert.js:21:16)
          - |
            Function.equal (/Users/simen/Development/read-package-json/node_modules/tap/lib/tap-assert.js:163:10)
          - |
            Test._testAssert (/Users/simen/Development/read-package-json/node_modules/tap/lib/tap-test.js:87:16)
          - |
            /Users/simen/Development/read-package-json/test/bin.js:39:7
          - |
            /Users/simen/Development/read-package-json/read-json.js:345:5
          - |
            checkBinReferences_ (/Users/simen/Development/read-package-json/read-json.js:313:25)
          - |
            final (/Users/simen/Development/read-package-json/read-json.js:343:3)
          - |
            then (/Users/simen/Development/read-package-json/read-json.js:113:5)
          - |
            /Users/simen/Development/read-package-json/read-json.js:284:20
        found:  1
        wanted: 0
      ...
    ok 6 no mapping to bin because object was empty
    not ok 7 test/bin.js
      ---
        exit:    1
        command: "/Users/simen/.nvm/versions/node/v0.12.2/bin/node bin.js"
      ...

    1..7
    # tests 7
    # pass  2
    # fail  5

ok test/bom.js .......................................... 2/2
ok test/helpful.js ...................................... 3/3
ok test/non-json.js ..................................... 3/3
ok test/readmes.js ...................................... 3/3
total ................................................. 28/33

not ok
npm ERR! Test failed.  See above for more details.

Unhandled error in `gitHead` function

I tried to do npm test in one of my packages and got

TypeError: Cannot call method 'replace' of undefined
npm ERR!     at /usr/local/lib/node_modules/npm/node_modules/read-package-json/read-json.js:333:45

npm-debug.log:

0 info it worked if it ends with ok
1 verbose cli [ 'node', '/usr/bin/npm', 'test' ]
2 info using [email protected]
3 info using [email protected]
4 verbose node symlink /usr/bin/node
5 verbose read json /Users/medikoo/Projects/_packages/signaldb/package.json
6 error TypeError: Cannot call method 'replace' of undefined
6 error     at /usr/local/lib/node_modules/npm/node_modules/read-package-json/read-json.js:333:45
6 error     at fs.js:117:20
6 error     at /usr/local/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:53:5
6 error     at /usr/local/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:62:5
6 error     at Object.oncomplete (fs.js:297:15)
7 error If you need help, you may report this log at:
7 error     <http://github.com/isaacs/npm/issues>
7 error or email it to:
7 error     <[email protected]>
8 error System Darwin 12.2.0
9 error command "node" "/usr/bin/npm" "test"
10 error cwd /Users/medikoo/Projects/_packages/signaldb
11 error node -v v0.8.16
12 error npm -v 1.1.69
13 error type non_object_property_call
14 verbose exit [ 1, true ]

After digging a bit I found that it blindly assumes that file .git/refs/heads/master exists in .git folder, while in this case it isn't.

I'm not sure about reasoning of reading git configuration so I decided not to try to fix it myself :)

Error with read-package-json when running npm install over uncommited git changes

I get an error when I run npm install over a repository that has uncommited git changes.

Error is as follows -

TypeError: Cannot call method 'replace' of undefined
at C:\Program Files\nodejs\node_modules\npm\node_modules\read-package-json\read-json.js:333:45
at fs.js:117:20
at C:\Program Files\nodejs\node_modules\npm\node_modules\graceful-fs\graceful-fs.js:53:5
at C:\Program Files\nodejs\node_modules\npm\node_modules\graceful-fs\graceful-fs.js:62:5
at Object.oncomplete (fs.js:297:15)
If you need help, you may report this log at:
http://github.com/isaacs/npm/issues
or email it to:
[email protected]
System Windows_NT 6.1.7601
command "C:\Program Files\nodejs\node.exe" "C:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js"
"
cwd C:\nodeexpressapp\quo
node -v v0.8.16
npm -v 1.1.69
type non_object_property_call
Additional logging details can be found in:
C:\nodeexpressapp\quo\npm-debug.log
not ok code 0

If I run npm install after git commit it works just fine.

If possible, add git sha to parsed data

When trying to determine what's broken from one npm version to another, or from an npm version to a projects repo, "good actors" generally tag their repos with $npm_publish_version. Not everyone does though, and so determining what's different is time consuming, at best. It seems like a nice feature to be able to (when possible, obviously it's not always possible), to grab the latest git commit line from where npm publish is run from, and put that into the uploaded bundle.

2.0.7 breaks 0.10 & 0.12

Commit 839b56e uses an arrow function, which breaks on Node 0.10 and 0.12. That means it should've been semver-major, but wasn't.

I would suggest reverting this commit, publishing a patch release, unreverting, then publishing 3.0.0.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.