Is it possible to publish a node package by cloning other's? - node.js

I need to use a node package in React Native.
But it requires a minor fixes for React Native bundling.
So I want to do something like this.
1. Clone the node package
2. Do minor updates for React Native(dependencies, update some codes for React Native)
3. Publish
Is this possible?
Is this violation of privacy policy?
Can I publish under node package owner's license?
Thanks in advance.

If the project is on GitHub, you could fork the repo, make your changes, and in your package.json use your own copy of the project like so, without having to re-publish it to npm:
"dependencies": {
"thepackage": "git://github.com/username/thepackage.git"
}
With regards to the licensing question however, you'll have to look into the specific license of the package you're using.

You can npm install a git repo as a package, instead of publishing a minor fix copy.

Related

What are pros and cons of using angular library vs directly referring it from git in package.json

There is a way of creating libraries in Angular and then we can also refer it by directly specifying the projects git url in package.json instead of library. What are the pros and cons of both these approaches? I created angular library which has some additional steps and then realized I could have used the project without creating the library, which seems easier. Any thoughts?
Basically, difference between -
https://blog.angularindepth.com/creating-a-library-in-angular-6-87799552e7e5
And
npm install private github repositories by dependency in package.json
NPM is specifically designed to control versioning of the NPM packages. It is designed as such that if we try to push the same NPM package version again then it doesn't allow that which is a safer way compared to directly installing it from git.
Git is not responsible for maintaining the versioning in package.json file.
You can end up in a situation where you may be using the different copies of the same version.

How to modify an npm package built with TypeScript

I want to try and make some changes to a package published in npm? (I've suggest some changes as an issue but I think they are simple enough for me to attempt them).
https://www.npmjs.com/package/bt-presence#contributing--modifying
The author supplies some information on how to modify the package, but not really enough for someone doing it for the first time.
Where should I clone the GitHub repo to? The folder where the package is installed? I tried it in my home folder and that would not build (unmodified).
The command npm run build - where is this run from? The root folder of the package where the package.json is?
Will I need to modify the package.json?
In general what is the best way to develop something like this for npm? I've worked on packages before but they were simply Javascript.
If you want to work on the bt-presence package in isolation, you can put the cloned repository anywhere. If you want to use your modified version of bt-presence in combination with an application, my recommended approach is to register bt-presence as a dependency in the application's package.json file with the version set to a relative path to your bt-presence repository; then running npm install in the application will make a symlink from node_modules/bt-presence in the application to your bt-presence repository.
npm run build should indeed be run from the root folder that contains the package.json of bt-presence.
If you just want to change the code of bt-presence, you won't need to modify its package.json. You would only modify the package.json if you need to change any of the settings in there, e.g, if you need to add additional dependencies to your version of bt-presence.
None of the above is really specific to TypeScript. (Some JavaScript packages have build processes too if they need to transform or package the JavaScript files in some way.)

How to use a package in Angular2 without publishing it to npm

I have a package which is published to npm and we are successfully using the package in our angular2 applications by defining the dependency in package.json as
"dependencies": {
"somesharedmodule": "^1.0.21",
}
and in our components as import {SharedService} from 'somesharedmodule'.
Now we dont want to make the library public(not interested to make private library too).My question is - i have a module in some folder of my local system.Can i use this module in my application without making the package published in npm. can somebody please guide me the alternatives to use a module in my application without publishing it?
Not clear what exactly you want to do... Bu there are lots of options:
npm link https://docs.npmjs.com/cli/link
use github private repo:
"dependencies": {
"ng2-resource": "https://github.com/{nickName}/{repoName}.git"
}
link your IDE to use local folder as node_modules
manually copy/paste library into project's node_modules

Shipping node.js project with custom dependencies

I fixed a couple of issues in nested dependencies of my node.js project (dependencies are managed by npm). These fixes are pending pull requests and thus aren't published. What's the best way to use them in my project?
I know that I can do npm link inside the fixed version of the library and then npm link library-name inside my project to force npm to use my fixed version. This approach works but installs my library-name globally on my machine which I don't like.
Is it possible to have it locally in main project's repo, force the project to use it and don't do npm link.
You can use a url as the dependency and point it to your own repo (fork).
https://docs.npmjs.com/files/package.json#urls-as-dependencies
for example:
"dependencies": {
"foo": "git+ssh://user#hostname:project.git#commit-ish"
}
If your pull requests are on GitHub its even easier...
As of version 1.1.65, you can refer to GitHub urls as just "foo":
"user/foo-project". Just as with git URLs, a commit-ish suffix can be
included.
https://docs.npmjs.com/files/package.json#github-urls

Substitute a package in NPM/Node

Is it possible to force an external npm dependency to use a different node.js package that offers the same API but a different implementation?
If you're willing to do that and that module is open source you could fork that on github, change their package.json to include the module you want and use github url for your own package.json like this:
"modulename": "git+https://git#github.com/user/repo.git"
You should be able to download the source of whatever module you would prefer and put that folder within your node_modules folder. From that point you simply require it within your Node.js app like any other NPM module.
I recommend downloading the code for the API you want, creating an src/assets folder, placing it in there, changing the package name in package.json to something not used in npm, then using 'require('newPackageName')' within your code.
If you decide to use some of package.json's capabilities to point towards a specific version (like using "1.4.7" as opposed to "^1.4.7") or if you point to a github address, be careful when you run npm update. It will replace your URL with the latest version in npmjs.org with that specific name. I don't know if it still does this in newer versions of npm, but in the version that works with Node.js 0.12, this is the default behavior.
I can tell you that node shrinkwrap will work, but it will prevent any other packages from being updated as well. No, you cannot just have one shrinkwrapped dependency, it has to be all of them, or npm update won't work.

Resources