Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Deprecation warning when using import #190

Open
rigwild opened this issue Apr 11, 2019 · 32 comments · May be fixed by #207
Open

Deprecation warning when using import #190

rigwild opened this issue Apr 11, 2019 · 32 comments · May be fixed by #207
Assignees

Comments

@rigwild
Copy link

rigwild commented Apr 11, 2019

When using import with esm using morgan, I get the following warning message :

morgan deprecated default format: use combined format node_modules\esm\esm.js:1:277757

This does not occur when using require.
Example : https://repl.it/repls/SeagreenGrippingHexagon

On Morgan v1.9.1.

@dougwilson
Copy link
Contributor

Thanks for the report. This should only display if you're trying to get the deprecated morgan.default property, though. I'll need to dig in to see what is going on.

@rigwild
Copy link
Author

rigwild commented Apr 11, 2019

import loads default by default. This default property needs to be renamed. There's probably a workaround for this but I can't help.

@dougwilson
Copy link
Contributor

So it will be renamed eventually, which is why it is deprecated.

@dougwilson dougwilson self-assigned this Apr 11, 2019
@dhowe
Copy link

dhowe commented May 13, 2019

Same problem here. Is there anyway to get rid of the distracting 'deprecated' warning without forking and changing the source code?

@dougwilson
Copy link
Contributor

I haven't yet investigated what changes can be made to this module to fix the deprecation warning for the import syntax, but the warnings can always be suppressed from printing, though node command line switch, event listener, environment variable. You can read more here about how the deprecation system works if that helps at all for the time being: https://www.npmjs.com/package/depd

@dhowe
Copy link

dhowe commented May 13, 2019

perhaps remove the deprecation warning until you have time to investigate further?

@dougwilson
Copy link
Contributor

The deprecation warning was added almost 5 years ago and there was no issue until this issue. Perhaps if this issue was opened closer to when it was added reverting would be considered, but whatever has changed since then isn't this module.

@dhowe
Copy link

dhowe commented May 13, 2019

My guess is that people are simply using the 'import' style more now.
The fix is just a comment (see this PR), but of course its your call...

@mbrowne
Copy link

mbrowne commented Jul 19, 2019

Here is a fix that leaves the deprecation message in place: #207

Note that module.exports.default is still pointing to the default format function. I'm not sure if that might confuse any other tools that parse ES6 exports, but this at least prevents the deprecation warning from being erroneously shown when using esm.

@josemvcerqueira
Copy link

Quick fix is to pass "tiny" instead of dev to morgan.

@mbrowne
Copy link

mbrowne commented Dec 13, 2019

@dougwilson I tried updating my app to use native ES modules now that they have landed in node (since node 13.2.0), but ran into some issues, so need to stick with esm for now. (It seems it will be a while before the ecosystem catches up with native ES modules to make adopting them a little more seamless.) So if you were to release a new major version of morgan that drops the deprecated default format (as you previously mentioned as a possibility), that would still be very helpful in the meantime.

@laurlas
Copy link

laurlas commented Apr 1, 2020

This will do the trick
import * as morgan from 'morgan'

@ryhinchey
Copy link
Contributor

To be clear, this issue is specific to using the esm package and not the import syntax in general.

Testing this with a basic import of import morgan from 'morgan' in node 12 or 13 does not produce the deprecation notice.

@chriscalo
Copy link

chriscalo commented Apr 11, 2020

This will do the trick
import * as morgan from 'morgan'

I was hopeful, but turns out this doesn't work 😕

@dougwilson
Copy link
Contributor

I did some additional research today with the esm module and it looks like the issue is only with the import * syntax, using import morgan from 'morgan' not only did not produce the warning for me, but looking at the import syntax, that seems like the correct method to important this module. Can anyone who is using esm confirm this?

@mbrowne
Copy link

mbrowne commented Apr 12, 2020

This is enough to cause the warning for me:

test.js:

import morgan from 'morgan'
node -r esm test.js

As discussed here, the issue is that morgan has an export called default that isn't actually the default export.

@ahmetbcakici
Copy link

same problem still!

@danieldare
Copy link

same problem yeah

@n2ptune
Copy link

n2ptune commented Oct 15, 2020

same problem so far..

@hectorbus
Copy link

Same thing...

@craigcosmo
Copy link

I got this problem. any solutions ?

@n2ptune
Copy link

n2ptune commented Nov 4, 2020

@craigcosmo It was solved by changing the import statement to require.

@craigcosmo
Copy link

yeah I tried that, and its fixed

@RMERCADOR98
Copy link

Hey guys!

When you call morgan just try to do this:

app.use(morgan("dev"));

It worked for me, the "dev" is cause i use "npm run dev" (you can change it on package.json, instead of using "start", to start the server, hope i could be helpfull :D

@mbrowne
Copy link

mbrowne commented Jan 17, 2021

@RMERCADOR98 All that does is change to the formatting option named dev described in the readme, which is intended for development (so overly verbose and not ideal for production).

@mbrowne
Copy link

mbrowne commented Jan 17, 2021

In other news, I am using Koa instead of Express in my latest server, so I used koa-morgan, so I'm not getting the warning anymore because the import is now indirect.

Obviously this won't help those who want to use Express or httpServer and so are using morgan directly - for that, the best workaround is still to just use require instead of import, until if/when the next version of morgan is eventually released.

@techieshark
Copy link

@mbrowne I can confirm that this prevents the deprecation warning:

const morgan = require('morgan');

... but in typescript, it seems I now lose type information on the file.

The following works, but only if tsconfig has compilerOptions.module = "CommonJS" rather than any of the 'ES...' module options (e.g. es6).

import morgan = require('morgan');

@rigwild
Copy link
Author

rigwild commented Jan 18, 2021

@dougwilson Every new comment is repeating what has been said before. Maybe you should lock the conversation until resolved.

@daniyaniazi

This comment was marked as off-topic.

@prajwalmachado

This comment was marked as off-topic.

@mbrowne

This comment was marked as off-topic.

@SilvinPradhan

This comment was marked as off-topic.

@expressjs expressjs locked as off-topic and limited conversation to collaborators Jun 1, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet