root / HServer / 00.Server / 00.Program / node_modules / depd / Readme.md
이력 | 보기 | 이력해설 | 다운로드 (9.79 KB)
1 | 39 | HKM | # depd |
---|---|---|---|
2 | |||
3 | [![NPM Version][npm-version-image]][npm-url] |
||
4 | [![NPM Downloads][npm-downloads-image]][npm-url] |
||
5 | [![Node.js Version][node-image]][node-url] |
||
6 | [![Linux Build][travis-image]][travis-url] |
||
7 | [![Windows Build][appveyor-image]][appveyor-url] |
||
8 | [![Coverage Status][coveralls-image]][coveralls-url] |
||
9 | |||
10 | Deprecate all the things |
||
11 | |||
12 | > With great modules comes great responsibility; mark things deprecated! |
||
13 | |||
14 | ## Install |
||
15 | |||
16 | This module is installed directly using `npm`: |
||
17 | |||
18 | ```sh |
||
19 | $ npm install depd |
||
20 | ``` |
||
21 | |||
22 | This module can also be bundled with systems like |
||
23 | [Browserify](http://browserify.org/) or [webpack](https://webpack.github.io/), |
||
24 | though by default this module will alter it's API to no longer display or |
||
25 | track deprecations. |
||
26 | |||
27 | ## API |
||
28 | |||
29 | <!-- eslint-disable no-unused-vars --> |
||
30 | |||
31 | ```js |
||
32 | var deprecate = require('depd')('my-module') |
||
33 | ``` |
||
34 | |||
35 | This library allows you to display deprecation messages to your users. |
||
36 | This library goes above and beyond with deprecation warnings by |
||
37 | introspection of the call stack (but only the bits that it is interested |
||
38 | in). |
||
39 | |||
40 | Instead of just warning on the first invocation of a deprecated |
||
41 | function and never again, this module will warn on the first invocation |
||
42 | of a deprecated function per unique call site, making it ideal to alert |
||
43 | users of all deprecated uses across the code base, rather than just |
||
44 | whatever happens to execute first. |
||
45 | |||
46 | The deprecation warnings from this module also include the file and line |
||
47 | information for the call into the module that the deprecated function was |
||
48 | in. |
||
49 | |||
50 | **NOTE** this library has a similar interface to the `debug` module, and |
||
51 | this module uses the calling file to get the boundary for the call stacks, |
||
52 | so you should always create a new `deprecate` object in each file and not |
||
53 | within some central file. |
||
54 | |||
55 | ### depd(namespace) |
||
56 | |||
57 | Create a new deprecate function that uses the given namespace name in the |
||
58 | messages and will display the call site prior to the stack entering the |
||
59 | file this function was called from. It is highly suggested you use the |
||
60 | name of your module as the namespace. |
||
61 | |||
62 | ### deprecate(message) |
||
63 | |||
64 | Call this function from deprecated code to display a deprecation message. |
||
65 | This message will appear once per unique caller site. Caller site is the |
||
66 | first call site in the stack in a different file from the caller of this |
||
67 | function. |
||
68 | |||
69 | If the message is omitted, a message is generated for you based on the site |
||
70 | of the `deprecate()` call and will display the name of the function called, |
||
71 | similar to the name displayed in a stack trace. |
||
72 | |||
73 | ### deprecate.function(fn, message) |
||
74 | |||
75 | Call this function to wrap a given function in a deprecation message on any |
||
76 | call to the function. An optional message can be supplied to provide a custom |
||
77 | message. |
||
78 | |||
79 | ### deprecate.property(obj, prop, message) |
||
80 | |||
81 | Call this function to wrap a given property on object in a deprecation message |
||
82 | on any accessing or setting of the property. An optional message can be supplied |
||
83 | to provide a custom message. |
||
84 | |||
85 | The method must be called on the object where the property belongs (not |
||
86 | inherited from the prototype). |
||
87 | |||
88 | If the property is a data descriptor, it will be converted to an accessor |
||
89 | descriptor in order to display the deprecation message. |
||
90 | |||
91 | ### process.on('deprecation', fn) |
||
92 | |||
93 | This module will allow easy capturing of deprecation errors by emitting the |
||
94 | errors as the type "deprecation" on the global `process`. If there are no |
||
95 | listeners for this type, the errors are written to STDERR as normal, but if |
||
96 | there are any listeners, nothing will be written to STDERR and instead only |
||
97 | emitted. From there, you can write the errors in a different format or to a |
||
98 | logging source. |
||
99 | |||
100 | The error represents the deprecation and is emitted only once with the same |
||
101 | rules as writing to STDERR. The error has the following properties: |
||
102 | |||
103 | - `message` - This is the message given by the library |
||
104 | - `name` - This is always `'DeprecationError'` |
||
105 | - `namespace` - This is the namespace the deprecation came from |
||
106 | - `stack` - This is the stack of the call to the deprecated thing |
||
107 | |||
108 | Example `error.stack` output: |
||
109 | |||
110 | ``` |
||
111 | DeprecationError: my-cool-module deprecated oldfunction |
||
112 | at Object.<anonymous> ([eval]-wrapper:6:22) |
||
113 | at Module._compile (module.js:456:26) |
||
114 | at evalScript (node.js:532:25) |
||
115 | at startup (node.js:80:7) |
||
116 | at node.js:902:3 |
||
117 | ``` |
||
118 | |||
119 | ### process.env.NO_DEPRECATION |
||
120 | |||
121 | As a user of modules that are deprecated, the environment variable `NO_DEPRECATION` |
||
122 | is provided as a quick solution to silencing deprecation warnings from being |
||
123 | output. The format of this is similar to that of `DEBUG`: |
||
124 | |||
125 | ```sh |
||
126 | $ NO_DEPRECATION=my-module,othermod node app.js |
||
127 | ``` |
||
128 | |||
129 | This will suppress deprecations from being output for "my-module" and "othermod". |
||
130 | The value is a list of comma-separated namespaces. To suppress every warning |
||
131 | across all namespaces, use the value `*` for a namespace. |
||
132 | |||
133 | Providing the argument `--no-deprecation` to the `node` executable will suppress |
||
134 | all deprecations (only available in Node.js 0.8 or higher). |
||
135 | |||
136 | **NOTE** This will not suppress the deperecations given to any "deprecation" |
||
137 | event listeners, just the output to STDERR. |
||
138 | |||
139 | ### process.env.TRACE_DEPRECATION |
||
140 | |||
141 | As a user of modules that are deprecated, the environment variable `TRACE_DEPRECATION` |
||
142 | is provided as a solution to getting more detailed location information in deprecation |
||
143 | warnings by including the entire stack trace. The format of this is the same as |
||
144 | `NO_DEPRECATION`: |
||
145 | |||
146 | ```sh |
||
147 | $ TRACE_DEPRECATION=my-module,othermod node app.js |
||
148 | ``` |
||
149 | |||
150 | This will include stack traces for deprecations being output for "my-module" and |
||
151 | "othermod". The value is a list of comma-separated namespaces. To trace every |
||
152 | warning across all namespaces, use the value `*` for a namespace. |
||
153 | |||
154 | Providing the argument `--trace-deprecation` to the `node` executable will trace |
||
155 | all deprecations (only available in Node.js 0.8 or higher). |
||
156 | |||
157 | **NOTE** This will not trace the deperecations silenced by `NO_DEPRECATION`. |
||
158 | |||
159 | ## Display |
||
160 | |||
161 |  |
||
162 | |||
163 | When a user calls a function in your library that you mark deprecated, they |
||
164 | will see the following written to STDERR (in the given colors, similar colors |
||
165 | and layout to the `debug` module): |
||
166 | |||
167 | ``` |
||
168 | bright cyan bright yellow |
||
169 | | | reset cyan |
||
170 | | | | | |
||
171 | ▼ ▼ ▼ ▼ |
||
172 | my-cool-module deprecated oldfunction [eval]-wrapper:6:22 |
||
173 | ▲ ▲ ▲ ▲ |
||
174 | | | | | |
||
175 | namespace | | location of mycoolmod.oldfunction() call |
||
176 | | deprecation message |
||
177 | the word "deprecated" |
||
178 | ``` |
||
179 | |||
180 | If the user redirects their STDERR to a file or somewhere that does not support |
||
181 | colors, they see (similar layout to the `debug` module): |
||
182 | |||
183 | ``` |
||
184 | Sun, 15 Jun 2014 05:21:37 GMT my-cool-module deprecated oldfunction at [eval]-wrapper:6:22 |
||
185 | ▲ ▲ ▲ ▲ ▲ |
||
186 | | | | | | |
||
187 | timestamp of message namespace | | location of mycoolmod.oldfunction() call |
||
188 | | deprecation message |
||
189 | the word "deprecated" |
||
190 | ``` |
||
191 | |||
192 | ## Examples |
||
193 | |||
194 | ### Deprecating all calls to a function |
||
195 | |||
196 | This will display a deprecated message about "oldfunction" being deprecated |
||
197 | from "my-module" on STDERR. |
||
198 | |||
199 | ```js |
||
200 | var deprecate = require('depd')('my-cool-module') |
||
201 | |||
202 | // message automatically derived from function name |
||
203 | // Object.oldfunction |
||
204 | exports.oldfunction = deprecate.function(function oldfunction () { |
||
205 | // all calls to function are deprecated |
||
206 | }) |
||
207 | |||
208 | // specific message |
||
209 | exports.oldfunction = deprecate.function(function () { |
||
210 | // all calls to function are deprecated |
||
211 | }, 'oldfunction') |
||
212 | ``` |
||
213 | |||
214 | ### Conditionally deprecating a function call |
||
215 | |||
216 | This will display a deprecated message about "weirdfunction" being deprecated |
||
217 | from "my-module" on STDERR when called with less than 2 arguments. |
||
218 | |||
219 | ```js |
||
220 | var deprecate = require('depd')('my-cool-module') |
||
221 | |||
222 | exports.weirdfunction = function () { |
||
223 | if (arguments.length < 2) { |
||
224 | // calls with 0 or 1 args are deprecated |
||
225 | deprecate('weirdfunction args < 2') |
||
226 | } |
||
227 | } |
||
228 | ``` |
||
229 | |||
230 | When calling `deprecate` as a function, the warning is counted per call site |
||
231 | within your own module, so you can display different deprecations depending |
||
232 | on different situations and the users will still get all the warnings: |
||
233 | |||
234 | ```js |
||
235 | var deprecate = require('depd')('my-cool-module') |
||
236 | |||
237 | exports.weirdfunction = function () { |
||
238 | if (arguments.length < 2) { |
||
239 | // calls with 0 or 1 args are deprecated |
||
240 | deprecate('weirdfunction args < 2') |
||
241 | } else if (typeof arguments[0] !== 'string') { |
||
242 | // calls with non-string first argument are deprecated |
||
243 | deprecate('weirdfunction non-string first arg') |
||
244 | } |
||
245 | } |
||
246 | ``` |
||
247 | |||
248 | ### Deprecating property access |
||
249 | |||
250 | This will display a deprecated message about "oldprop" being deprecated |
||
251 | from "my-module" on STDERR when accessed. A deprecation will be displayed |
||
252 | when setting the value and when getting the value. |
||
253 | |||
254 | ```js |
||
255 | var deprecate = require('depd')('my-cool-module') |
||
256 | |||
257 | exports.oldprop = 'something' |
||
258 | |||
259 | // message automatically derives from property name |
||
260 | deprecate.property(exports, 'oldprop') |
||
261 | |||
262 | // explicit message |
||
263 | deprecate.property(exports, 'oldprop', 'oldprop >= 0.10') |
||
264 | ``` |
||
265 | |||
266 | ## License |
||
267 | |||
268 | [MIT](LICENSE) |
||
269 | |||
270 | [npm-version-image]: https://img.shields.io/npm/v/depd.svg |
||
271 | [npm-downloads-image]: https://img.shields.io/npm/dm/depd.svg |
||
272 | [npm-url]: https://npmjs.org/package/depd |
||
273 | [travis-image]: https://img.shields.io/travis/dougwilson/nodejs-depd/master.svg?label=linux |
||
274 | [travis-url]: https://travis-ci.org/dougwilson/nodejs-depd |
||
275 | [appveyor-image]: https://img.shields.io/appveyor/ci/dougwilson/nodejs-depd/master.svg?label=windows |
||
276 | [appveyor-url]: https://ci.appveyor.com/project/dougwilson/nodejs-depd |
||
277 | [coveralls-image]: https://img.shields.io/coveralls/dougwilson/nodejs-depd/master.svg |
||
278 | [coveralls-url]: https://coveralls.io/r/dougwilson/nodejs-depd?branch=master |
||
279 | [node-image]: https://img.shields.io/node/v/depd.svg |
||
280 | [node-url]: https://nodejs.org/en/download/ |