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

Error using built-in node module dependencies using import syntax [Meteor-1.3-beta.3] #5963

Closed
emgee3 opened this issue Jan 9, 2016 · 24 comments
Assignees
Labels
confirmed We want to fix or implement it
Milestone

Comments

@emgee3
Copy link
Contributor

emgee3 commented Jan 9, 2016

When importing npm packages that use built-in node module dependencies, such as the Twilio module, Meteor errors when trying to load built-in node modules.

When using the twilio module from inside a package, I can use Npm.require('twilio') which will correctly import the built-in modules, but in 1.3, where one uses import twilio from 'twilio' this is not the case.

While building for os.osx.x86_64:
   /Users/mg/Meteor/13/node_modules/twilio/lib/webhooks.js: could not resolve module "crypto"
   /Users/mg/Meteor/13/node_modules/twilio/lib/webhooks.js: could not resolve module "url"
   /Users/mg/Meteor/13/node_modules/twilio/lib/Client.js: could not resolve module "querystring"
   /Users/mg/Meteor/13/node_modules/request/index.js: could not resolve module "util"
   /Users/mg/Meteor/13/node_modules/tough-cookie/lib/cookie.js: could not resolve module "net"
   /Users/mg/Meteor/13/node_modules/tough-cookie/lib/cookie.js: could not resolve module "url"
   /Users/mg/Meteor/13/node_modules/tough-cookie/lib/pubsuffix.js: could not resolve module "punycode"
   /Users/mg/Meteor/13/node_modules/tough-cookie/lib/memstore.js: could not resolve module "util"
   /Users/mg/Meteor/13/node_modules/tough-cookie/lib/cookie.js: could not resolve module "punycode"
   /Users/mg/Meteor/13/node_modules/request/lib/helpers.js: could not resolve module "crypto"
   /Users/mg/Meteor/13/node_modules/request/request.js: could not resolve module "http"
   /Users/mg/Meteor/13/node_modules/request/request.js: could not resolve module "https"
   /Users/mg/Meteor/13/node_modules/request/request.js: could not resolve module "url"
   /Users/mg/Meteor/13/node_modules/request/request.js: could not resolve module "util"
   /Users/mg/Meteor/13/node_modules/request/request.js: could not resolve module "stream"
   /Users/mg/Meteor/13/node_modules/request/request.js: could not resolve module "querystring"
   /Users/mg/Meteor/13/node_modules/request/request.js: could not resolve module "zlib"
   /Users/mg/Meteor/13/node_modules/inherits/inherits.js: could not resolve module "util"
   /Users/mg/Meteor/13/node_modules/bl/node_modules/readable-stream/lib/_stream_readable.js: could not resolve module "buffer"
   /Users/mg/Meteor/13/node_modules/bl/node_modules/readable-stream/lib/_stream_readable.js: could not resolve module "events"
   /Users/mg/Meteor/13/node_modules/bl/node_modules/readable-stream/lib/_stream_readable.js: could not resolve module "stream"
   /Users/mg/Meteor/13/node_modules/string_decoder/index.js: could not resolve module "buffer"
   /Users/mg/Meteor/13/node_modules/bl/node_modules/readable-stream/lib/_stream_writable.js: could not resolve module "buffer"
   /Users/mg/Meteor/13/node_modules/bl/node_modules/readable-stream/lib/_stream_writable.js: could not resolve module "stream"
   /Users/mg/Meteor/13/node_modules/bl/bl.js: could not resolve module "util"
   /Users/mg/Meteor/13/node_modules/boom/lib/index.js: could not resolve module "http"
   /Users/mg/Meteor/13/node_modules/hoek/lib/index.js: could not resolve module "crypto"
   /Users/mg/Meteor/13/node_modules/hoek/lib/index.js: could not resolve module "path"
   /Users/mg/Meteor/13/node_modules/hoek/lib/index.js: could not resolve module "util"
   /Users/mg/Meteor/13/node_modules/sntp/lib/index.js: could not resolve module "dgram"
   /Users/mg/Meteor/13/node_modules/sntp/lib/index.js: could not resolve module "dns"
   /Users/mg/Meteor/13/node_modules/cryptiles/lib/index.js: could not resolve module "crypto"
   /Users/mg/Meteor/13/node_modules/hawk/lib/crypto.js: could not resolve module "crypto"
   /Users/mg/Meteor/13/node_modules/hawk/lib/crypto.js: could not resolve module "url"
   /Users/mg/Meteor/13/node_modules/hawk/lib/client.js: could not resolve module "url"
   /Users/mg/Meteor/13/node_modules/aws-sign2/index.js: could not resolve module "crypto"
   /Users/mg/Meteor/13/node_modules/aws-sign2/index.js: could not resolve module "url"
   /Users/mg/Meteor/13/node_modules/assert-plus/assert.js: could not resolve module "assert"
   /Users/mg/Meteor/13/node_modules/assert-plus/assert.js: could not resolve module "stream"
   /Users/mg/Meteor/13/node_modules/assert-plus/assert.js: could not resolve module "util"
   /Users/mg/Meteor/13/node_modules/http-signature/lib/parser.js: could not resolve module "util"
   /Users/mg/Meteor/13/node_modules/http-signature/lib/signer.js: could not resolve module "crypto"
   /Users/mg/Meteor/13/node_modules/http-signature/lib/signer.js: could not resolve module "http"
   /Users/mg/Meteor/13/node_modules/http-signature/lib/signer.js: could not resolve module "util"
   /Users/mg/Meteor/13/node_modules/http-signature/lib/verify.js: could not resolve module "crypto"
   /Users/mg/Meteor/13/node_modules/http-signature/lib/util.js: could not resolve module "crypto"
   /Users/mg/Meteor/13/node_modules/asn1.js/lib/asn1/api.js: could not resolve module "vm"
   /Users/mg/Meteor/13/node_modules/asn1.js/lib/asn1/base/buffer.js: could not resolve module "buffer"
   /Users/mg/Meteor/13/node_modules/asn1.js/lib/asn1/decoders/pem.js: could not resolve module "buffer"
   /Users/mg/Meteor/13/node_modules/asn1.js/lib/asn1/encoders/der.js: could not resolve module "buffer"
   /Users/mg/Meteor/13/node_modules/asn1.js/lib/asn1/encoders/pem.js: could not resolve module "buffer"
   /Users/mg/Meteor/13/node_modules/ctype/ctf.js: could not resolve module "assert"
   /Users/mg/Meteor/13/node_modules/ctype/ctio.js: could not resolve module "assert"
   /Users/mg/Meteor/13/node_modules/ctype/ctype.js: could not resolve module "assert"
   /Users/mg/Meteor/13/node_modules/tunnel-agent/index.js: could not resolve module "net"
   /Users/mg/Meteor/13/node_modules/tunnel-agent/index.js: could not resolve module "tls"
   /Users/mg/Meteor/13/node_modules/tunnel-agent/index.js: could not resolve module "http"
   /Users/mg/Meteor/13/node_modules/tunnel-agent/index.js: could not resolve module "https"
   /Users/mg/Meteor/13/node_modules/tunnel-agent/index.js: could not resolve module "events"
   /Users/mg/Meteor/13/node_modules/tunnel-agent/index.js: could not resolve module "assert"
   /Users/mg/Meteor/13/node_modules/tunnel-agent/index.js: could not resolve module "util"
   /Users/mg/Meteor/13/node_modules/stringstream/stringstream.js: could not resolve module "util"
   /Users/mg/Meteor/13/node_modules/stringstream/stringstream.js: could not resolve module "stream"
   /Users/mg/Meteor/13/node_modules/forever-agent/index.js: could not resolve module "util"
   /Users/mg/Meteor/13/node_modules/forever-agent/index.js: could not resolve module "http"
   /Users/mg/Meteor/13/node_modules/forever-agent/index.js: could not resolve module "net"
   /Users/mg/Meteor/13/node_modules/forever-agent/index.js: could not resolve module "tls"
   /Users/mg/Meteor/13/node_modules/forever-agent/index.js: could not resolve module "https"
   /Users/mg/Meteor/13/node_modules/combined-stream/lib/combined_stream.js: could not resolve module "util"
   /Users/mg/Meteor/13/node_modules/combined-stream/lib/combined_stream.js: could not resolve module "stream"
   /Users/mg/Meteor/13/node_modules/delayed-stream/lib/delayed_stream.js: could not resolve module "stream"
   /Users/mg/Meteor/13/node_modules/delayed-stream/lib/delayed_stream.js: could not resolve module "util"
   /Users/mg/Meteor/13/node_modules/form-data/lib/form_data.js: could not resolve module "util"
   /Users/mg/Meteor/13/node_modules/form-data/lib/form_data.js: could not resolve module "path"
   /Users/mg/Meteor/13/node_modules/form-data/lib/form_data.js: could not resolve module "http"
   /Users/mg/Meteor/13/node_modules/form-data/lib/form_data.js: could not resolve module "https"
   /Users/mg/Meteor/13/node_modules/form-data/lib/form_data.js: could not resolve module "url"
   /Users/mg/Meteor/13/node_modules/form-data/lib/form_data.js: could not resolve module "fs"
   /Users/mg/Meteor/13/node_modules/request/lib/har.js: could not resolve module "fs"
   /Users/mg/Meteor/13/node_modules/request/lib/har.js: could not resolve module "querystring"
   /Users/mg/Meteor/13/node_modules/generate-function/index.js: could not resolve module "util"
   /Users/mg/Meteor/13/node_modules/request/lib/har.js: could not resolve module "util"
   /Users/mg/Meteor/13/node_modules/node-uuid/uuid.js: could not resolve module "crypto"
   /Users/mg/Meteor/13/node_modules/oauth-sign/index.js: could not resolve module "crypto"
   /Users/mg/Meteor/13/node_modules/oauth-sign/index.js: could not resolve module "querystring"
   /Users/mg/Meteor/13/node_modules/isstream/isstream.js: could not resolve module "stream"
   /Users/mg/Meteor/13/node_modules/request/lib/redirect.js: could not resolve module "url"
   /Users/mg/Meteor/13/node_modules/twilio/lib/RestClient.js: could not resolve module "util"
   /Users/mg/Meteor/13/node_modules/twilio/lib/IpMessagingClient.js: could not resolve module "util"
   /Users/mg/Meteor/13/node_modules/twilio/lib/PricingClient.js: could not resolve module "util"
   /Users/mg/Meteor/13/node_modules/twilio/lib/MonitorClient.js: could not resolve module "util"
   /Users/mg/Meteor/13/node_modules/twilio/lib/TaskRouterClient.js: could not resolve module "util"
   /Users/mg/Meteor/13/node_modules/twilio/lib/LookupsClient.js: could not resolve module "util"
   /Users/mg/Meteor/13/node_modules/twilio/lib/TrunkingClient.js: could not resolve module "util"
   /Users/mg/Meteor/13/node_modules/jws/lib/data-stream.js: could not resolve module "buffer"
   /Users/mg/Meteor/13/node_modules/jws/lib/data-stream.js: could not resolve module "stream"
   /Users/mg/Meteor/13/node_modules/jws/lib/data-stream.js: could not resolve module "util"
   /Users/mg/Meteor/13/node_modules/buffer-equal-constant-time/index.js: could not resolve module "buffer"
   /Users/mg/Meteor/13/node_modules/jwa/index.js: could not resolve module "crypto"
   /Users/mg/Meteor/13/node_modules/jwa/index.js: could not resolve module "util"
   /Users/mg/Meteor/13/node_modules/jws/lib/sign-stream.js: could not resolve module "stream"
   /Users/mg/Meteor/13/node_modules/jws/lib/tostring.js: could not resolve module "buffer"
   /Users/mg/Meteor/13/node_modules/jws/lib/sign-stream.js: could not resolve module "util"
   /Users/mg/Meteor/13/node_modules/jws/lib/verify-stream.js: could not resolve module "stream"
   /Users/mg/Meteor/13/node_modules/jws/lib/verify-stream.js: could not resolve module "util"
   /Users/mg/Meteor/13/node_modules/jwt-simple/lib/jwt.js: could not resolve module "crypto"
   /Users/mg/Meteor/13/node_modules/twilio/lib/Capability.js: could not resolve module "querystring"
   /Users/mg/Meteor/13/node_modules/deprecate/index.js: could not resolve module "os"
   /Users/mg/Meteor/13/node_modules/twilio/lib/TaskRouterWorkerCapability.js: could not resolve module "util"
   /Users/mg/Meteor/13/node_modules/twilio/lib/TaskRouterWorkspaceCapability.js: could not resolve module "util"
   /Users/mg/Meteor/13/node_modules/twilio/lib/TaskRouterTaskQueueCapability.js: could not resolve module "util"

=> Your application has errors. Waiting for file change.
@emgee3 emgee3 changed the title Error using built-in node modules using import syntax [Meteor-1.3-beta.3] Error using built-in node module dependencies using import syntax [Meteor-1.3-beta.3] Jan 9, 2016
@readydestroy
Copy link

I receive a similar error with superagent.

import request from 'superagent'

I am using 1.3 beta 3

   While building for web.browser:
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/debug/node.js: could not resolve module "tty"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/debug/node.js: could not resolve module "util"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/debug/node.js: could not resolve module "fs"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/debug/node.js: could not resolve module "net"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/formidable/lib/incoming_form.js: could not resolve module "fs"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/formidable/lib/incoming_form.js: could not resolve module "util"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/formidable/lib/incoming_form.js: could not resolve module "path"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/formidable/lib/file.js: could not resolve module "util"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/formidable/lib/file.js: could not resolve module "fs"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/formidable/lib/file.js: could not resolve module "events"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/formidable/lib/file.js: could not resolve module "crypto"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/formidable/lib/multipart_parser.js: could not resolve module "buffer"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/formidable/lib/querystring_parser.js: could not resolve module "querystring"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/formidable/lib/octet_parser.js: could not resolve module "events"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/formidable/lib/octet_parser.js: could not resolve module "util"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/formidable/lib/json_parser.js: could not resolve module "buffer"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/formidable/lib/incoming_form.js: could not resolve module "string_decoder"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/formidable/lib/incoming_form.js: could not resolve module "events"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/formidable/lib/incoming_form.js: could not resolve module "stream"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/formidable/lib/incoming_form.js: could not resolve module "os"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/form-data/node_modules/combined-stream/lib/combined_stream.js: could not resolve module
   "util"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/form-data/node_modules/combined-stream/lib/combined_stream.js: could not resolve module
   "stream"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/lib/delayed_stream.js:
   could not resolve module "stream"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/lib/delayed_stream.js:
   could not resolve module "util"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/form-data/lib/form_data.js: could not resolve module "util"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/form-data/lib/form_data.js: could not resolve module "path"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/form-data/lib/form_data.js: could not resolve module "http"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/form-data/lib/form_data.js: could not resolve module "https"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/form-data/lib/form_data.js: could not resolve module "url"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/form-data/lib/form_data.js: could not resolve module "fs"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/lib/node/response.js: could not resolve module "util"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/lib/node/utils.js: could not resolve module "string_decoder"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/lib/node/utils.js: could not resolve module "stream"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/lib/node/utils.js: could not resolve module "zlib"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/lib/node/response.js: could not resolve module "stream"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/lib/node/index.js: could not resolve module "url"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/methods/index.js: could not resolve module "http"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/lib/node/index.js: could not resolve module "stream"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/lib/node/part.js: could not resolve module "util"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/mime/mime.js: could not resolve module "path"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/mime/mime.js: could not resolve module "fs"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/readable-stream/node_modules/inherits/inherits.js: could not resolve module "util"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/readable-stream/lib/_stream_readable.js: could not resolve module "buffer"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/readable-stream/lib/_stream_readable.js: could not resolve module "events"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/readable-stream/lib/_stream_readable.js: could not resolve module "stream"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/readable-stream/node_modules/string_decoder/index.js: could not resolve module "buffer"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/readable-stream/lib/_stream_writable.js: could not resolve module "buffer"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/node_modules/readable-stream/lib/_stream_writable.js: could not resolve module "stream"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/lib/node/index.js: could not resolve module "https"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/lib/node/index.js: could not resolve module "http"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/lib/node/index.js: could not resolve module "fs"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/lib/node/index.js: could not resolve module "zlib"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/lib/node/index.js: could not resolve module "util"
   /Users/mattschulz/code/noBlaze/node_modules/superagent/lib/node/agent.js: could not resolve module "url"

@stubailo stubailo modified the milestone: Release 1.3 Jan 10, 2016
@mkumas
Copy link

mkumas commented Jan 10, 2016

Having the same problem. When using "import" or commonjs "require" to import any module, meteor cannot load the built-in node modules imported inside that module and gives multiple error messages "could not resolve module xxx"

@benjamn
Copy link
Contributor

benjamn commented Jan 10, 2016

This is an error that I added in the most recent beta release, but it appears to be (way!) too strict. Sorry about that.

Two options:

  • Remove the warning altogether, making missing a dependency a run-time error.
  • Loosen the warning to allow importing built-in modules when building the server bundle.

@benjamn benjamn self-assigned this Jan 10, 2016
@benjamn benjamn added confirmed We want to fix or implement it blocks-basic-module-use labels Jan 10, 2016
@benjamn
Copy link
Contributor

benjamn commented Jan 10, 2016

After thinking about this some more, I'm afraid the first option is the only option. Any code that runs on more than one platform is likely to contain platform-specific parts (think if (Meteor.isClient) {...}), so an import statement that seems unresolvable on one platform might never actually run on that platform. Dead code is safe code!

@trusktr
Copy link
Contributor

trusktr commented Jan 10, 2016

@benjamn @emgee3 What are "built-in modules"?

@ghost
Copy link

ghost commented Jan 11, 2016

Can import statements not only be at the top level, so there is no case where import is inside if(Meteor.isClient)?

@trusktr
Copy link
Contributor

trusktr commented Jan 11, 2016

@sanjo import statements can never be anywhere other than at the top level.

import bar from 'bar' // just fine

if (true) {
  import foo from 'foo' // error!
}

@benjamn
Copy link
Contributor

benjamn commented Jan 11, 2016

@sanjo @trusktr export statements can definitely only be at the top level, but the debate over import statements is still active.

With the current Meteor ecmascript package, I'm pretty sure import statements can be nested within if statements. While I think it's important to be able to nest import statements inside conditional statements, especially for isomorphic Meteor code, I would definitely encourage a top-level-only style whenever possible, even if it means you have to keep platform-specific code in platform-specific modules (that is, in client/ or server/ directories).

@benjamn
Copy link
Contributor

benjamn commented Jan 11, 2016

Even if we forbid nested import statements, we still have the problem of require calls embedded within arbitrary code, which is bad news for any kind of reachability analysis.

@benjamn
Copy link
Contributor

benjamn commented Jan 11, 2016

@trusktr built-in modules are those special modules in Node for which require.resolve(id) === id, like fs and http.

@ghost
Copy link

ghost commented Jan 11, 2016

Yeah, having platform specific imports is really necessary if you want to import a module in a isometric code module.

Maybe another way to achieve that would be that Meteor picks the right entry point in the module for the platform. So if you import myModule from 'my-module', on the client side it would require myModule/client. And on the server side it would require myModule/server. Both, the client and server folder have an entry point file that exports everything of the module for the platform.

The same thing could be also achieved on a file granularity with file extensions like .client.js and .server.js.

@emgee3
Copy link
Contributor Author

emgee3 commented Jan 11, 2016

Beta 4 fixed my issue, thanks!

I've left the issue open because of the ongoing conversation, but feel free to close.

@benjamn
Copy link
Contributor

benjamn commented Jan 11, 2016

@emgee3 Thanks for confirming.

Happy for discussion to continue!

@benjamn benjamn closed this as completed Jan 11, 2016
@ghost
Copy link

ghost commented Jan 11, 2016

@benjamn I have created a separate issue for the imports / exports problem with isomorphic code here: #5970

@readydestroy
Copy link

I still cannot import superagent. I am on beta 4. Meteor does not crash like beta 3, but I get the error:

Cannot find module 'tty'

at runtime in my console.

Which is an internal dependency of superagent.

I also noticed that the first post the error started with: While building for os.osx.x86_64:
While my error started with: While building for web.browser:

The modules I am having trouble with are modules that are built into with Node itself.
tty, http, ....

@benjamn
Copy link
Contributor

benjamn commented Jan 11, 2016

@readydestroy browser console or server console?

@readydestroy
Copy link

Browser console. Running code from my client folder.

@benjamn
Copy link
Contributor

benjamn commented Jan 11, 2016

Ah, tty only works in Node, so importing it on the client will definitely cause a runtime error.

If you really need those modules on the client, you can do something similar to what browserify does:

npm install tty-browserify
echo 'module.exports = require("tty-browserify");' >> node_modules/tty.js

This installs a stub implementation of the Node tty module, then creates an alias for it so you can import ... from "tty" or require("tty") instead of having to say tty-browserify.

@readydestroy
Copy link

Thanks! That make sense. I am used to having browserify in my workflow and now I don't with meteor. Any tips to streamline that process?

@benjamn
Copy link
Contributor

benjamn commented Jan 11, 2016

After thinking about it more, you probably want to use the real implementation on the server, so a better version of node_modules/tty.js would be:

module.exports = Meteor.isServer ? require("tty") : require("tty-browserify");

Automatically providing stub implementations for built-in modules is definitely something I would consider, but it probably won't happen until after 1.3. In the meantime, you should feel free to bulk-install any/all browserify stub packages. They won't be included in your app bundle unless you actually use them, so you don't have to worry about figuring out exactly which ones are used.

@trusktr
Copy link
Contributor

trusktr commented Jan 12, 2016

but the debate over import statements is still active

The good thing is even if native implementations don't support this at first, it could always be added later, which would be backwards compatible. So, the debate can continue. I personally don't need it. I can do everything I need to do without it. If that helps make things easier to analyze for tooling, then I'm for it (no nested imports). But, either way, we'll all be fine. Plus, that's where it might be justifiable to have the runtime module-loader API instead.

@marbemac
Copy link

@benjamn We're running into this issue with superagent as well. I believe the convention modules are adopting is use of the "browser" field in the package.json file. That's what superagent does, as briefly discussed here:

ladjs/superagent#822
https://github.com/defunctzombie/package-browser-field-spec

Any chance of supporting this property?

I believe this might also take care of #5970.

Edit: just realized you linked to browserify's support of the "browser" field in the issue linked above. I believe webpack supports this as well. Some discussion on the topic here:
webpack/webpack#151

@trusktr
Copy link
Contributor

trusktr commented Jan 29, 2016

Alternatively you could import that file directly.

/#!/JoePea
On Jan 26, 2016 12:14 AM, "Marc MacLeod" notifications@github.com wrote:

@benjamn https://github.com/benjamn We're running into this issue with
superagent as well. I believe the convention modules are adopting is use of
the "browser" field in the package.json file. That's what superagent does,
as briefly discussed here:

ladjs/superagent#822
ladjs/superagent#822
https://github.com/defunctzombie/package-browser-field-spec

Any chance of supporting this property?


Reply to this email directly or view it on GitHub
#5963 (comment).

@coding365days
Copy link

@emgee3 ,
Even I am trying to create an angular 6 app that uses twilio-video and faced some errors (below is the same). I'll be thankful if given some right direction.

ERROR in ./node_modules/aws-sign2/index.js
Module not found: Error: Can't resolve 'crypto' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\aws-sign2'
ERROR in ./node_modules/aws4/aws4.js
Module not found: Error: Can't resolve 'crypto' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\aws4'
ERROR in ./node_modules/ecc-jsbn/index.js
Module not found: Error: Can't resolve 'crypto' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\ecc-jsbn'
ERROR in ./node_modules/http-signature/lib/verify.js
Module not found: Error: Can't resolve 'crypto' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\http-signature\lib'
ERROR in ./node_modules/http-signature/lib/signer.js
Module not found: Error: Can't resolve 'crypto' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\http-signature\lib'
ERROR in ./node_modules/jwa/index.js
Module not found: Error: Can't resolve 'crypto' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\jwa'
ERROR in ./node_modules/oauth-sign/index.js
Module not found: Error: Can't resolve 'crypto' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\oauth-sign'
ERROR in ./node_modules/request/lib/oauth.js
Module not found: Error: Can't resolve 'crypto' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\request\lib'
ERROR in ./node_modules/request/lib/helpers.js
Module not found: Error: Can't resolve 'crypto' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\request\lib'
ERROR in ./node_modules/request/lib/hawk.js
Module not found: Error: Can't resolve 'crypto' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\request\lib'
ERROR in ./node_modules/sshpk/lib/private-key.js
Module not found: Error: Can't resolve 'crypto' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\sshpk\lib'
ERROR in ./node_modules/sshpk/lib/signature.js
Module not found: Error: Can't resolve 'crypto' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\sshpk\lib'
ERROR in ./node_modules/sshpk/lib/utils.js
Module not found: Error: Can't resolve 'crypto' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\sshpk\lib'
ERROR in ./node_modules/sshpk/lib/fingerprint.js
Module not found: Error: Can't resolve 'crypto' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\sshpk\lib'
ERROR in ./node_modules/sshpk/lib/key.js
Module not found: Error: Can't resolve 'crypto' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\sshpk\lib'
ERROR in ./node_modules/sshpk/lib/dhe.js
Module not found: Error: Can't resolve 'crypto' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\sshpk\lib'
ERROR in ./node_modules/sshpk/lib/identity.js
Module not found: Error: Can't resolve 'crypto' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\sshpk\lib'
ERROR in ./node_modules/sshpk/lib/certificate.js
Module not found: Error: Can't resolve 'crypto' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\sshpk\lib'
ERROR in ./node_modules/sshpk/lib/formats/ssh-private.js
Module not found: Error: Can't resolve 'crypto' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\sshpk\lib\formats'
ERROR in ./node_modules/sshpk/lib/formats/pem.js
Module not found: Error: Can't resolve 'crypto' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\sshpk\lib\formats'
ERROR in ./node_modules/sshpk/lib/formats/openssh-cert.js
Module not found: Error: Can't resolve 'crypto' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\sshpk\lib\formats'
ERROR in ./node_modules/twilio/lib/webhooks/webhooks.js
Module not found: Error: Can't resolve 'crypto' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\twilio\lib\webhooks'
ERROR in ./node_modules/request/lib/har.js
Module not found: Error: Can't resolve 'fs' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\request\lib'
ERROR in ./node_modules/forever-agent/index.js
Module not found: Error: Can't resolve 'http' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\forever-agent'
ERROR in ./node_modules/http-signature/lib/signer.js
Module not found: Error: Can't resolve 'http' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\http-signature\lib'
ERROR in ./node_modules/request/request.js
Module not found: Error: Can't resolve 'http' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\request'
ERROR in ./node_modules/tunnel-agent/index.js
Module not found: Error: Can't resolve 'http' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\tunnel-agent'
ERROR in ./node_modules/forever-agent/index.js
Module not found: Error: Can't resolve 'https' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\forever-agent'
ERROR in ./node_modules/request/request.js
Module not found: Error: Can't resolve 'https' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\request'
ERROR in ./node_modules/tunnel-agent/index.js
Module not found: Error: Can't resolve 'https' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\tunnel-agent'
ERROR in ./node_modules/forever-agent/index.js
Module not found: Error: Can't resolve 'net' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\forever-agent'
ERROR in ./node_modules/tough-cookie/lib/cookie.js
Module not found: Error: Can't resolve 'net' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\tough-cookie\lib'
ERROR in ./node_modules/tunnel-agent/index.js
Module not found: Error: Can't resolve 'net' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\tunnel-agent'
ERROR in ./node_modules/deprecate/index.js
Module not found: Error: Can't resolve 'os' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\deprecate'
ERROR in ./node_modules/mime-types/index.js
Module not found: Error: Can't resolve 'path' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\mime-types'
ERROR in ./node_modules/assert-plus/assert.js
Module not found: Error: Can't resolve 'stream' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\assert-plus'
ERROR in ./node_modules/combined-stream/lib/combined_stream.js
Module not found: Error: Can't resolve 'stream' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\combined-stream\lib'
ERROR in ./node_modules/delayed-stream/lib/delayed_stream.js
Module not found: Error: Can't resolve 'stream' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\delayed-stream\lib'
ERROR in ./node_modules/isstream/isstream.js
Module not found: Error: Can't resolve 'stream' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\isstream'
ERROR in ./node_modules/jws/lib/verify-stream.js
Module not found: Error: Can't resolve 'stream' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\jws\lib'
ERROR in ./node_modules/jws/lib/data-stream.js
Module not found: Error: Can't resolve 'stream' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\jws\lib'
ERROR in ./node_modules/jws/lib/sign-stream.js
Module not found: Error: Can't resolve 'stream' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\jws\lib'
ERROR in ./node_modules/request/request.js
Module not found: Error: Can't resolve 'stream' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\request'
ERROR in ./node_modules/sshpk/lib/ed-compat.js
Module not found: Error: Can't resolve 'stream' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\sshpk\lib'
ERROR in ./node_modules/forever-agent/index.js
Module not found: Error: Can't resolve 'tls' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\forever-agent'
ERROR in ./node_modules/tunnel-agent/index.js
Module not found: Error: Can't resolve 'tls' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\tunnel-agent'
ERROR in ./node_modules/request/request.js
Module not found: Error: Can't resolve 'zlib' in 'D:\kiranr\extech\ng\twilio-video-angular\node_modules\request'
i 「wdm」: Failed to compile.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
confirmed We want to fix or implement it
Projects
None yet
Development

No branches or pull requests

8 participants