Ich habe eine Komponente Reagieren erstellt, und ich möchte ein verteilen integrierte Version (gebaut mit großem Schluck) dieser Komponente, so in gulpfile.js
ich habe:Bauen Reagiert Komponenten mit Gulp, Browserify und Babel
var gulp = require('gulp');
var browserify = require('browserify');
var babelify = require('babelify');
var source = require('vinyl-source-stream');
gulp.task('build-js', function() {
return browserify('./src/Foo.js')
.transform(babelify)
.bundle()
.pipe(source('bundle.js'))
.pipe(gulp.dest('./dist'));
});
gulp.task('build', ['build-js']);
in .babelrc
:
{
"presets": ["es2015", "react", "stage-0"],
}
Und das sind die Abhängigkeiten in package.json
:
"dependencies": {
"react": "^0.14.7"
}
"devDependencies": {
"babel-polyfill": "^6.3.14",
"babel-preset-es2015": "^6.3.13",
"babel-preset-react": "^6.3.13",
"babel-preset-stage-0": "^6.3.13",
"babelify": "^7.2.0",
"browserify": "^13.0.0",
"gulp": "^3.9.1",
"react": "^0.14.7",
"react-dom": "^0.14.7",
"vinyl-source-stream": "^1.1.0"
}
Wenn ich laufe gulp build
(nach npm install
) build.js
Datei unter /dist
erstellt wird, aber wenn ich versuche, diese Komponente zu verwenden, um von anderen App Reagieren bekomme ich den Fehler:
Error: Cannot find module ' ./emptyFunction'.
Wenn ich in diese Datei zu graben (build.js
)
var emptyFunction = require('./emptyFunction');
...
var camelize = require('./camelize');
diese Dateien existiert nicht unter ./dist
, so dass der Fehler ausgelöst wird, wenn ich versuche, die neue Reagieren App Aufruf der Komponente zu erstellen: kann ich diese Zeilen sehen
import Foo from 'my-components-in-node-modules';
Was fehlt mir?
bearbeiten:
Wie ich sehen kann, ist die seltsame erfordert kommen aus der Komponentendatei Reagieren erfordern:
var React = require('react');
// or import React from 'react';
class Foo extends React.Component {
static propTypes = {...};
static defaultProps = {...};
render() {...}
}
export default Foo;
Wenn ich var React = require('react');
diejenigen erfordert (emptyFunction, camelize entfernen) verschwinden, und der Fehler ist offensichtlich React is not defined
.
Edit2:
Wie @JMM schon sagt, soll ich die Abhängigkeiten (in meinem Fall Reagieren) im dist
Ordner, aber wie soll ich es erreichen? Was passiert, wenn meine Komponente mehr Abhängigkeiten hat? Ich dachte, dass ich nur die Abhängigkeiten in package.json
definiert haben musste.
Edit3:
ich schließlich erkannte, dass ich nicht browserify
brauchen, nur gulp-babel
:
var gulp = require('gulp');
var babel = require('gulp-babel');
gulp.task('bundle', bundle);
function bundle() {
gulp.src('./src/*.js')
.pipe(babel())
.pipe(gulp.dest('./dist'));
}
gulp.task('build', ['bundle']);
Und das ist alles. Das vollständige Beispiel ist hier: react-svg-components.
Was ist Ihre Frage? – JMM
@JMM Wenn ich versuche, die Komponente aus einer reaktiven App zu verwenden, gibt gulp den Fehler 'Fehler: Modul nicht gefunden'./EmptyFunction''. – Manolo
Der Fehler ist zur Kompilierzeit oder zur Laufzeit? Sie erhalten eine einzige Datei 'dist/bundle.js', richtig? Alle Abhängigkeiten sollten in diesem Paket enthalten sein. Also sollten die 'require()' Aufrufe, die Sie hervorheben, zu etwas im Bundle aufgelöst werden. – JMM