-
-
Save niespodd/1fa82da6f8c901d1c33d2fcbb762947d to your computer and use it in GitHub Desktop.
{... | |
"scripts": { | |
"postinstall": "node patch.js", | |
... | |
} | |
} |
// Angular >= 11 | |
const fs = require('fs') | |
const f = 'node_modules/@angular-devkit/build-angular/src/webpack/configs/browser.js' | |
fs.readFile(f, 'utf8', function(err, data) { | |
if (err) { | |
return console.log(err) | |
} | |
var result = data.replace(/node: false/g, 'node: {crypto: true, stream: true, fs: "empty"}') | |
fs.writeFile(f, result, 'utf8', function(err) { | |
if (err) return console.log(err) | |
}) | |
}); | |
// ---- | |
// For Angular <11 | |
const fs = require('fs'); | |
const f = 'node_modules/@angular-devkit/build-angular/src/angular-cli-files/models/webpack-configs/browser.js'; | |
fs.readFile(f, 'utf8', function (err,data) { | |
if (err) { | |
return console.log(err); | |
} | |
var result = data.replace(/node: false/g, 'node: {crypto: true, stream: true}'); | |
fs.writeFile(f, result, 'utf8', function (err) { | |
if (err) return console.log(err); | |
}); | |
}); | |
// ---- |
Still works for angular 7.0.0 with web3 v.1.0.0-beta.36, thank you
Thank you so much, i was struggling with this error from last two days.
Thanks, worked with Angular 7.1 with js-git.
I was having trouble getting this to work but after I deleted the node_modules
folder and run npm install
again it worked.
awesome. thank you!!!
Thanks a lot!
It also works for me. But I run node patch.js and then run the angular project. Thanks man
Using var result = data.replace(/node: false/g, 'node: {crypto: true, stream: true, fs: 'empty', net: 'empty'}'); works for me!
Thx!
Angular - 7.2.3
I was getting 'fs' error for ExtJs in angular v7.
I applied above solution and got rid of fs error but getting below error on ng serve :
"No browser version for node.js core module fs available"
@literalpie
Hi guys,
This works fine for me. Just get into the node-modules, and move into the browser.js file and change the node: {crypto: true, stream: true}
---node_modules/angular-devkit/build-angular/src/angular-cli-files/models/webpack-configs/browser.js---
Thanks!!!
Angular CLI: 7.3.6
Node: 10.15.3
OS: linux x64
Angular: 7.2.10
... animations, common, compiler, compiler-cli, core, forms
... language-service, platform-browser, platform-browser-dynamic
... router
Package Version
-----------------------------------------------------------
@angular-devkit/architect 0.13.6
@angular-devkit/build-angular 0.13.6
@angular-devkit/build-optimizer 0.13.6
@angular-devkit/build-webpack 0.13.6
@angular-devkit/core 7.3.6
@angular-devkit/schematics 7.3.6
@angular/cdk 7.3.5
@angular/cli 7.3.6
@angular/material 7.3.5
@ngtools/webpack 7.3.6
@schematics/angular 7.3.6
@schematics/update 0.13.6
rxjs 6.3.3
typescript 3.2.4
webpack 4.29.0
I've been stuck on an issue similar to this for over two weeks now and nobody has been able to fix my issue. This fixed it. THANK YOU
A better approach is to patch Angular's webpack config using customWebpackConfig
feature of angular-builders
.
It allows merging configs or patching it with custom processing function without monkey-patching angular code in node_modules
.
Hi, I was getting this error:
ERROR in ./node_modules/aws-iot-device-sdk/device/lib/tls.js [ng] Module not found: Error: Can't resolve 'tls' in '/home/borch/Documents/Ionic/aws-iot-mqtt-client/node_modules/aws-iot-device-sdk/device/lib' [ng] ℹ 「wdm」: Failed to compile.
Then modified the patch.js file with this content:
const fs = require('fs');
const f = 'node_modules/@angular-devkit/build-angular/src/angular-cli-files/models/webpack-configs/browser.js';
fs.readFile(f, 'utf8', function (err,data) {
if (err) {
return console.log(err);
}
var result = data.replace(/node: false/g, 'node: {crypto: true, stream: true, fs: \'empty\', net: \'empty\', tls: \'empty\'}');
fs.writeFile(f, result, 'utf8', function (err) {
if (err) return console.log(err);
});
});
I have removed node_modules and rerun npm install
on my application root folder and now my ionic application compiles, I am not seeing anymore Can't resolve 'tls'
However, when I inspect the console from my web browser and I getting another error:
filesys.existsSync is not a function
I wonder if this is related to the path itself?
Works!
also working for secp256k1
lib in angular 7. Thanks
works! thanks
Hi, I was getting this error:
ERROR in ./node_modules/aws-iot-device-sdk/device/lib/tls.js [ng] Module not found: Error: Can't resolve 'tls' in '/home/borch/Documents/Ionic/aws-iot-mqtt-client/node_modules/aws-iot-device-sdk/device/lib' [ng] ℹ 「wdm」: Failed to compile.
Then modified the patch.js file with this content:
const fs = require('fs'); const f = 'node_modules/@angular-devkit/build-angular/src/angular-cli-files/models/webpack-configs/browser.js'; fs.readFile(f, 'utf8', function (err,data) { if (err) { return console.log(err); } var result = data.replace(/node: false/g, 'node: {crypto: true, stream: true, fs: \'empty\', net: \'empty\', tls: \'empty\'}'); fs.writeFile(f, result, 'utf8', function (err) { if (err) return console.log(err); }); });
I have removed node_modules and rerun
npm install
on my application root folder and now my ionic application compiles, I am not seeing anymore Can't resolve 'tls'However, when I inspect the console from my web browser and I getting another error:
filesys.existsSync is not a function
I wonder if this is related to the path itself?
I'm having this same issue. Did you solve this? Thanks in advance.
Works!!!Thanks
Anyone can explain why it works?
The path of the config files changed in angular 11, so the new file looks like this:
const fs = require('fs')
const f = 'node_modules/@angular-devkit/build-angular/src/webpack/configs/browser.js'
fs.readFile(f, 'utf8', function(err, data) {
if (err) {
return console.log(err)
}
var result = data.replace(/node: false/g, 'node: {crypto: true, stream: true, fs: "empty"}')
fs.writeFile(f, result, 'utf8', function(err) {
if (err) return console.log(err)
})
})
I've made an app template for myself and I included the following patch, based on same idea.
const file1 = 'node_modules/@angular-devkit/build-angular/src/angular-cli-files/models/webpack-configs/browser.js';
const file2 = 'node_modules/@angular-devkit/build-angular/src/webpack/configs/browser.js';
function doReplace(f, cb) {
fs.readFile(f, 'utf8', function (err,data) {
if (err) {
return cb(false);
}
var result = data.replace(/node: false/g, 'node: {crypto: true, stream: true}');
fs.writeFile(f, result, 'utf8', function (err) {
if (err) {
console.log(err);
return cb(false);
} else {
console.log('\x1b[36mCan\'t resolve \'stream\'\x1b[0m', "->", '\x1b[32mPROBLEM FIXED!\x1b[0m');
return cb(true);
}
});
});
}
doReplace(file1, function(success) {
if (!success) {
doReplace(file2, function(success) {
if (!success) {
console.error("ERROR: couldn't patch the CipherBase constructor problem with stream.Transform.")
}
});
}
});
I cannot find same file
OMG, It worked, I did not come over that we must once run npm install after writing this file in order to replace the content added in patch.js file to the node_modules location which we mentioned, got to know after 1 whole day
If this doesn't work for you just run 'node patch.js' from the command line once everything else has installed and that will apply the patch for you.
Yes, thank you very much, its works for me
Deprecated:
instead
resolve: {
fallback: {
crypto: false, //add any other libs you need
},
}
#14 90.92 Error: Cannot find module '/opt/project/patch.js'
#14 90.92 at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
#14 90.92 at Function.Module._load (internal/modules/cjs/loader.js:725:27)
#14 90.92 at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
#14 90.92 at internal/main/run_main_module.js:17:47 {
#14 90.92 code: 'MODULE_NOT_FOUND',
#14 90.92 requireStack: []
#14 90.92 }
im having error on jenkins build can someone help me ?
This solution doesn't seem to work anymore at least not in angular v13. Check out new solution here
This solution doesn't seem to work anymore at least not in angular v13. Check out new solution here
It should be obvious that it won't work for Angular 14 as well because there is no browser.js file in the path "node_modules/@angular-devkit/build-angular/src/webpack/configs/browser.js"
It should be obvious that it won't work for Angular 14 as well because there is no browser.js file in the path
"node_modules/@angular-devkit/build-angular/src/webpack/configs/browser.js"
Yes I was modifying browser.js as well, but now it's gone, and I find a new way:
My currently version: @angular/[email protected]", electron": "^24.1.3", "electron-builder": "^23.6.0".
APPROCH 1:
- You need the @angular-builders/custom-webpack, (for me, I just use the latest release and it is ^15.0.0, you may need to adjust in future)
npm install --save-dev @angular-builders/custom-webpack@^15.0.0
- update angular.json:
"your-app-name":{
"architect": {
"build": {
"builder": "@angular-builders/custom-webpack:browser",
"options": {
"customWebpackConfig": {
"path": "./extra-webpack.config.js"
},
"serve": {
"builder": "@angular-builders/custom-webpack:dev-server",
"options": {
"browserTarget":"your-app-name:build"
},
...
- extra-webpack.config.js
module.exports = {target:'electron-renderer'}
APPROCH 2: Here again we modify the config file :p
Your scripts now should update this file: node_modules\@angular-devkit\build-angular\src\webpack\configs\common.js
And make sure the target will be replaced to 'electron'-renderer' only.
replace old > target: [isPlatformServer ? 'node' : 'web', 'es2015'],
to > target: ['electron-renderer'],
This same fix worked for the jsforce library.