Reputation: 435
I have
import fs from 'fs'
and in my package.json I have
Then I run the command
> npm i fs
> [email protected] node_modules/fs
next in my React store I import 'fs' module
import fs from 'fs'
However when I try to use fs
I don't see methods except for constructor and a few other __methods. I don't see the method createReadStream or any other file manipulation methods.
Does anybody know what is wrong? (using Webpack) and can give more information upon request, but I am getting this far...
ps: why is it that I can npm i fs --save when I read on other posts that I do not have to do that (using node 5.5.0)
import Reflux from 'reflux'
import AddItemActions from '../actions/AddItemActions'
import request from 'superagent-bluebird-promise'
import fs from 'fs'
var ImageStore = Reflux.createStore({
init(){
.
.
.
},
decryptImage(file) {
var reader = new FileReader();
var info = {}
reader.onload = (output) => {
debugger
request.post("https://camfind.p.mashape.com/image_requests")
.set("X-Mashape-Key", "KEY")
.set("Content-Type", "application/x-www-form-urlencoded")
.set("Accept", "application/json")
.send({'focus': { 'x': 480}})
.send({'focus': { 'y': 640}})
.send({'image_request': {'altitude': 27.912109375}})
.send({'image_request': {'language': "en"}})
.send({'image_request': {'latitude': 35.8714220766008}})
.send({'image_request': {'locale' : "en_US"}})
.send({'image_request': {'longitude': 14.3583203002251}})
.send({'image_request': {'image': fs.createReadStream("/path" + 'file.jpg')}})
.then(function (result) {
console.log(result.status, result.headers, result.body);
this.info = result
},
function(error) {
console.log(error);
})
}
reader.readAsDataURL(file);
return info
},
.
.
.
.
})
Upvotes: 34
Views: 161477
Reputation: 1627
You can use the package universal-fs which allows you to use core Node:fs functions on the clientside.
Full disclosure I am the creator of this package.
Upvotes: 0
Reputation: 326
Dropped in here had an issue with fs, had to download file in docx. Reason for this is it's a node package not react, To fix i switched to file saver package and it works fine for my requirement, replaced toBuffer with toBlob and fs with saveAs, example code below.
//with fs
Packer.toBuffer(doc).then((buffer) => {
fs.writeFileSync("My Document.docx", buffer);
});
//with file saver
Packer.toBlob(doc).then(blob => {
console.log(blob)
saveAs(blob, 'MyDocument.docx')
})
you can know more about file saver here. https://www.npmjs.com/package/file-saver
Upvotes: 0
Reputation: 1941
npm i babel-plugin-preval
Though browser does not allow accessing file system during runtime, You can use prevail in React to read content from file system into memory during build time like so
// loading content of text file into react project during build time.
// which means everytime text content is changed, you need to rebuild the project to get the updated content.
const greetingContent = preval`
const fs = require('fs')
module.exports = fs.readFileSync(require.resolve('./greeting.txt'), 'utf8')
`
console.log(greetingContent);
Upvotes: -1
Reputation: 863
In create-react-app
they have stubbed out 'fs'. You cannot import it.
They did this because fs
is a node core module.
You'll have to find another solution to that problem. See this ticket.
Upvotes: 32
Reputation: 807
It's possible this might be an environment issue. It's not possible for the browser to interpret and run some Node server-side modules like fs
.
The solution is to run the fs
methods in a Node environment (server-side) or to find a package which offers the same functionality but written for the browser.
It's discussed in this question... Module not found: Error: Cannot resolve module 'fs'
And this question... Use fs module in React.js,node.js, webpack, babel,express
Upvotes: 6