J'essaie de jouer avec le routeur de réaction mais je ne peux pas le faire fonctionner avec browserify. Je suis coincé avec cette erreur:Browserify ne trouve pas le module 'react-router-dom'
events.js:182
throw er; // Unhandled 'error' event
^
Error: Cannot find module 'react-router-dom' from '/usr/src/app'
at /usr/src/app/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js:46:17
at process (/usr/src/app/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js:173:43)
at ondir (/usr/src/app/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js:188:17)
at load (/usr/src/app/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js:69:43)
at onex (/usr/src/app/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js:92:31)
at /usr/src/app/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js:22:47
at FSReqWrap.oncomplete (fs.js:152:21)
npm info lifecycle [email protected]~start: Failed to exec start script
Mon premier fichier js est server.js
qui génèrent un paquet pour charger app.js
. J'ai tout supprimé sur mon fichier app.js pour être sûr qu'aucun composant personnel ne crée un conflit. Donc c'est très léger maintenant! Mais ne fonctionne toujours pas.
Mon app.js fichier:
var React = require('react');
require('react-router-dom');
React.render(<div><p>Blop</p></div>, document.getElementById('base_ihm'));
Sans require('react-router-dom');
, tout fonctionne!
Mon server.js
:
var express = require('express');
var browserify = require('browserify');
var React = require('react');
var jsx = require('node-jsx');
var app = express();
// Constants
const PORT = 8080;
jsx.install();
// Enable compression
var compression = require('compression');
app.use(compression());
// Create a path name bundle.js which call app.js and apply browserify
app.use('/bundle.js', function(req, res) {
res.setHeader('content-type', 'application/javascript');
browserify('./app.js', {
debug: true
})
.transform('reactify')
.bundle()
.pipe(res);
});
// static ressources
app.use(express.static(__dirname + '/static/css'));
app.use(express.static(__dirname + '/static/images'));
// Main route
app.use('/', function(req, res) {
res.setHeader('Content-Type', 'text/html');
res.end(React.renderToStaticMarkup(
React.createElement(
'html', null,
// Header
React.createElement(
'head', null,
// Title
React.createElement('title', null, 'Irregular Verbs'),
// Meta
React.createElement('meta', {charSet: 'UTF-8'}, null),
React.createElement('meta', {name: 'viewport', content: 'width=device-width, initial-scale=1'}, null),
// Custom CSS
React.createElement('link', { rel: 'stylesheet', href: 'main.css' }, null)
),
// Body
React.DOM.body(
null,
React.DOM.div({
id: 'base_ihm',
dangerouslySetInnerHTML: {
__html: React.renderToString(React.createElement('div', null))
}
}),
// Use the path create just before
React.DOM.script({
src: '/bundle.js'
})
)
)
));
});
var server = app.listen(PORT, function() {
var addr = server.address();
console.log('Listening @ http://%s:%d', addr.address, addr.port);
});
Est-routeur réagit bien installé?
Il y a le contenu de mon fichier package.json:
{
"main": "server.js",
"scripts": {
"start": "node server.js"
},
"dependencies": {
"express": "^4.13.3",
"body-parser": "^1.15.2",
"node-jsx": "^0.13.3",
"react": "^15.6.1",
"react-dom": "^15.6.1",
"react-router-dom": "^4.0.0",
"browserify": "^14.4.0",
"reactify": "^1.1.1",
"mysql": "^2.11.1"
}
}
J'utilise docker
et docker-compose
. Sur mon Dockerfile, j'ai ajouté RUN npm ls
et RUN ls node_modules
: Je peux voir react-router
et react-router-dom
. Donc, il y a ici!
Toute mémoire cache avec docker?
Je renommer mon image pour être sûr d'utiliser le bon et pas un ancien. Je redémarre également mon conteneur en utilisant docker-compose up --force-recreate
. Donc, je suppose que c'est ok.
avec server.js où Erreur browserify est utilisé
Je pense avoir fait une erreur dans mon dossier de server.js, mais je ne sais pas ... Il n'y ce que j'ai essayé sans succès:
- J'essaie d'ajouter une approche globale: true puis global: false ma transformation ('reactify')
- Dans mon Dockerfile, j'essaie d'ajouter
npm install react-router-dom -g
pour être sûr qu'il a été installé - J'ai finalement mis à jour mes versions. Et aussi essayé reac-routeur-dom dans la version 4.1.1
- Je remplace le
require('react-router-dom')
parrequire('./node_modules/react-router-dom')
mais obtenir la même erreur (sauf que c'était le nouveau chemin qui n'a pas été trouvé).
Avez-vous une idée? Nous vous remercions de votre aide!