-
Notifications
You must be signed in to change notification settings - Fork 12k
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
Webpack Config is stripping out Crypto #1548
Comments
@TheLarkInn: Could you explain the
|
Most projects by default aren't using crypto so removing that buildin results in smaller bundles. We'll implement a way to control this in the future. |
I've had to fork the Angular CLI just to get my project to build properly. I don't think a build tool should be opinionated in this way. I spent over a day debugging to figure this out. Can you add the option in for this as soon as possible, I want to get off of my fork otherwise I am going to miss updates. |
Unless I'm missing something here, it's kinda relevant to notice that we're building for the browser environment. Browser does not have crypto. That we're using webpack to build the app, and that webpack is a node app is completely incidental: that could change to something else (SystemJS for instance) and your app would break as well. I understand that you can't change your dependency of a dependency, but it doesn't sound like it would work in a non-node environment anyway. In that sense, I do not think we should include crypto. |
That makes no sense, you are actively preventing anyone from building a Web app with crypto in it. Browsers do have crypto support: https://developer.mozilla.org/en-US/docs/Web/API/Window/crypto @TheLarkInn, @filipesilva: If you won't re-open this issue to fix it, please at least suggest a workaround for people that want to use Cryptography in Angular. (And BTW, this same project did build with the SystemJS version of Angular CLI) |
@TheLarkInn, @filipesilva: Are you able to reply to the above? |
@jmc265 so the node buildins are something that can vary per implementation of your app, and I see the merit of including them, however we need a clear and concise design around this proposal. If we expose these configuration properties, we need to do it in a way that will make sense to users, etc. What does this do? How do I use it? Why do I need it? What are the challenges etc. Design Process: https://docs.google.com/document/d/1p_L-4RKY5PRMs9qdunpN56U66PTJSijfU2yb6V6KMuI/view Linked above is our design process for creating a proposal for new features. I would certainly recommend you propose one for this feature for discussion. |
@TheLarkInn I am really not understanding what you are asking for. |
@TheLarkInn, @filipesilva: So you aren't going to fix this or provide any workaround? You are saying people who want to use crypto in their apps can't use Angular CLI... |
@jmc265 I think the most important part of the conversation above was "we'll implement a way to control this in the future.". Right now the CLI team is working real hard on supporting the most mainstream use cases. For example, CLI doesn't even have the ability to use the Angular template precompiler yet, or really any ability at all to add plug-ins or special configurations or anything else that doesn't match the default set up. I suggest perhaps bringing this issue back up some months from now, after that and numerous other mainstream cases are working well and in wide use. It'll probably be easier to get attention on corner cases at that time. You are correct above to say that, for the moment if you need a webpack or other setting beyond what CLI can do today, a good backup plan is to switch over to a (much more complex) "seed" project which drops the entire webpack configuration right in your project where you can edit it easily. |
@kylecordes: Thank you, that make sense. |
@jmc265 I'm just a drive-by, community, trying-to-be-helpful person using these technologies heavily, teaching some of them, reading lots of stuff, and sometimes commenting with explanations to help ease the workload of the team actually building this thing (so they can work more on building it). As for reopening issues... one of them would need to decide and comment on that. |
I stand corrected: the browser environment does have Suggestions are welcome, but bear in mind we do not want to use node's @jmc265 I'm also going to have to ask you to refrain from double posting though. I understand this issue is important for you but I get a load of notifications for this project, and more notifications do not make me get to issues faster. In fact, since I go over them in Google Inbox from oldest to newest, each time you double post the whole thread just gets moved to the top and thus it'll take longer to get seen. |
This issue is also affecting me. I am using the @jmc265 You can still use the Web Cryptography API if you want to do crypto |
I am new to Angular and WebPack and for that matter Crypto but I struggled with this issue for two days before finding this reported issue. I think a good improvement would be to output to the console during the build to tell the user that that "Crypto" is being skipped. Also what is being skipped should be documented somewhere so it is easier to find. Since webpack supports crypto (and since AWS libraries now support webpack) I see more developers like me getting stuck with this. Thanks to @jmc265 for the workaround. |
This issue is affecting me either. I'm tying to use I agree that this decisions made by angular-cli team need to be documented. Is crypto being skipped? Please, say it. |
@carlosfaria94 I'm closing your PR but adding the reasoning here so it's easier for people interested in this issue to follow. I'm sorry but a change that exposes node's Libraries that depend on I understand that there are server-side libraries that kind of support working in the browser if A possiblity in the near-ish future is to use a universal app instead. We're looking at adding some basic support soon. |
Is there a plan for a workaround? For example the ability to pass command line parameters to not skip Crypto? We are using Heroku and with the current implementation it makes it extremely difficult to allow Heroku to be in charge of building the app. I realize you do not consider a dependency on crypto a good practice or a standard implementation and that is fine but without a workaround it is difficult to use Angular-CLI in an automated build scenario. |
anything new on this? i am trying to use nats-io in an angular app create by the current angular-cli and require('nats') generates the error below. i suspect that this thread is relevant to this error. nuid.js:73Uncaught TypeError: crypto.randomBytes is not a function |
@bpair I'm currently using this package.json script to let Heroku build my app after it installs stuff:
It's not perfect as it's triggered when installing stuff, but it's not so bad and has worked for some time now :) |
Also affected here. Tried to use gencryption which has a dependency to crypto. The lib calls createHash(...) which leads to |
Could this be an option on .angular.cli? I am affected too, and the solution already exists, and already exists on webpack using |
Hi guys, I found a more permanent way of making crypto available for angular 6. 1 - install 2 - Add custom builder in angular.json : 3 - Create a file 4 - Add node support in
Thanks a lot to Evgeny Barabanov for his amazing article on this subject. |
Please note that the project is not actually using node’s crypto (which uses the operating systems underlying implementations) with the settings. But rather a JavaScript partial implementation of the module. This applies to the others as well. |
@clydin thanks for the suggestion to use path mapping in tsconfig.json, works like a charm. |
This fixes vulnerable build dependencies mainly by upgrading @angular/* packages to updated versions. The angular project defintion has changed accordingly, and incorporates a custom webpack config adapted from this guide: angular/angular-cli#1548 (comment)
We are suffering this same issue. After upgrading from Angular 2.0.0 to Angular 6.1.10 we are using the CLI for ng build and we have no more web pack. Our web app is using pdf and jpeg and tiff images heavily. We are using the tiff.js library and the ng build is resulting in:
We tried: |
Have you tried to use custom builders?
module.exports = {
node: {
path: true,
crypto: true,
fs: 'empty'
}
} |
Thank you Francois. This got the build to complete without errors. |
Sure, I'm glad it works. It's because there is no browser version of |
@GrandSchtroumpf's solution worked for me as well. But I'll just add to the pile and say that it would be great to see first-party support for this customization. |
@bjohnson-va there is first party support. please see the last paragraph of my comment above #1548 (comment) for a non-webpack specific solution. |
this is how I got it working via post-install script in Angular 6 with Angular CLI
just add whatever you need inside "node: {fs: 'empty', crypto: true, stream: true }" |
@studds |
OK, status update for Angular
This replaces the |
@filipesilva I realize your comment is quite old but according to MDN every major browser is now supporting crypto and the dance around to fixing this is quite painful - any plans on rectifying this? https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API |
If using the web crypto API, there is no action required within the CLI. It is purely a browser API much like the DOM or other web APIs. |
@clydin bcryptjs throws a warning |
Hi @ineiti , Your solution worked fine for the |
To @Baidaly - currently I downgraded to |
This issue has been automatically locked due to inactivity. Read more about our automatic conversation locking policy. This action has been performed automatically by a bot. |
Mac OSX El Capitan
angular-cli: local (v1.0.0-beta.10, branch: webpack)
node: 4.4.7
os: darwin x64
I've pulled down the Angular-cli project and am building it locally, so I am using the new webpack version.
The project that I am building uses Crypto libraries (via a dependency of a dependency ...).
When I was running
ng build
I was seeing the dependency built like this:And then when I looked at module 147 (I.E. the crypto module) I was seeing nothing there:
After a while of searching I took a look in the Angular-CLI code and saw that part of the webpack config (addon/ng2/models/webpack-build-common.ts) was this:
When I remove
crypto: 'empty'
everything builds correctly with the crypto module getting pulled in.So my question is, why have you specified that crypto should be empty?
Is there any way to fix this more permanently?
The text was updated successfully, but these errors were encountered: