From 4fa6c81c5d09db27953d89d4686aad0333474384 Mon Sep 17 00:00:00 2001 From: Simo Kinnunen Date: Fri, 11 Nov 2016 22:19:01 +0900 Subject: [PATCH] It lives. --- .editorconfig | 15 + .eslintrc.js | 6 + .gitignore | 4 + .npmignore | 5 + LICENSE | 13 + README.md | 53 ++++ example.png | Bin 0 -> 23329 bytes index.js | 111 +++++++ package.json | 27 ++ yarn.lock | 811 ++++++++++++++++++++++++++++++++++++++++++++++++++ 10 files changed, 1045 insertions(+) create mode 100644 .editorconfig create mode 100644 .eslintrc.js create mode 100644 .gitignore create mode 100644 .npmignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 example.png create mode 100644 index.js create mode 100644 package.json create mode 100644 yarn.lock diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..1a3de64 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +# http://editorconfig.org/ + +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[Makefile] +indent_style = tab +indent_size = 4 diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..c05adfa --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,6 @@ +module.exports = { + root: true, + extends: [ + 'standard' + ] +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ccf0b97 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.DS_Store +/*.tgz +/node_modules/ +/npm-debug.log diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..5cea1a9 --- /dev/null +++ b/.npmignore @@ -0,0 +1,5 @@ +.DS_Store +/*.tgz +/example.png +/node_modules/ +/npm-debug.log diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..1770217 --- /dev/null +++ b/LICENSE @@ -0,0 +1,13 @@ +Copyright © 2016 Simo Kinnunen + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..7ac9a7a --- /dev/null +++ b/README.md @@ -0,0 +1,53 @@ +# please-update-dependencies + +[![npm](https://img.shields.io/npm/v/please-update-dependencies.svg)](https://www.npmjs.com/package/please-update-dependencies) + +**please-update-dependencies** is a useful addition to [Node.js](https://nodejs.org/) CLI applications. It checks that currently installed dependencies satisfy the requirements set in your `package.json`, and won't let the user continue till they've updated the dependencies. + +![Example](example.png?raw=true) + +## Benefits/philosophy + +### Pros + +* Easy to understand error messages. +* Encourages users to solve issues by themselves rather than overloading the maintainer with questions or issues. +* No output when nothing's wrong. + +### Cons + +* If you release a botched update and forget to release a dependency that you've bumped up, users can't run your app. +* Only [semver](http://semver.org/) compatible dependencies are checked. + - If you use URLs as dependencies, they will simply be ignored. +* Slight but mostly unnoticeable overhead. + +## Installation + +Using [yarn](https://yarnpkg.com/): + +```sh +yarn add please-update-dependencies +``` + +Using [npm](https://www.npmjs.com/): + +```sh +npm install --save please-update-dependencies +``` + +Now, in your main file, before anything else, insert the following line: + +```js +require('please-update-dependencies')(module) +``` + + +If you're using [Babel](https://babeljs.io/) or similar, you probably have an existing entry point. You should put the line there before activating babel or anything else. + +If you don't put the line as the first thing in your file, you risk running into incompatibilities before any checks even run. + +The dependency check will run every time the binary is invoked, unless you've exported `ALLOW_OUTDATED_DEPENDENCIES=1`. It'll find the nearest `package.json` (either in the same folder or a parent folder) and check things from there. + +## License + +See [LICENSE](LICENSE). diff --git a/example.png b/example.png new file mode 100644 index 0000000000000000000000000000000000000000..ed93c8f305ba75d673c2ed44bdb6ca9bef3790ed GIT binary patch literal 23329 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