it-swarm.com.ru

Получение сообщения об ошибке «Не удается найти модуль» с помощью browserify, gulp, реаги.js

Так что я играл с React.js, gulp и browserify. Все прекрасно работает, пока я не попытаюсь запросить модуль в моем файле main.js. Мне требуются компоненты/модули в других файлах без проблем (см. Ниже), но когда я пытаюсь запросить один из них в своем файле main.js, я получаю следующую ошибку при запуске gulp serve:

Ошибка: не удается найти модуль "./components/Feed" из "/ Users/Kevin/Documents/MyWork/Web/реагировать/приложение/src/js" в/Users/Kevin/Documents/MyWork/Web/реагировать/node_modules/browserify /node_modules/resolve/lib/async.js:55:21 при загрузке (/Users/kevin/Documents/MyWork/web/react/node_modules/browserify/node_modules/resolve/lib/async.js:69:43) в onex (/Users/kevin/Documents/MyWork/web/react/node_modules/browserify/node_modules/resolve/lib/async.js:92:31) в/Users/kevin/Documents/MyWork/web/реагировать/node_modules/browserify/node_modules/resolv/lib/async.js: 22: 47 в Object.oncomplete (fs.js: 107: 15)

Если я удаляю оператор require (для Feed.js) из main.js, все компилируется и помещается в соответствующую папку dist и работает нормально (за исключением response.js, который жалуется на отсутствующий модуль, конечно).

Во-первых, моя структура папок выглядит следующим образом:

app
│-- gulpfile.js
│-- package.json
│
└───src
│   │
│   ├───js
│       │-- main.js
│       └───components
│            │-- Feed.js
│            │-- FeedList.js
│            │-- FeedItem.js
│            │-- FeedForm.js
│            │-- ShowAddButton.js
│            └
│   
└───dist

Мой gulpfile выглядит так:

var gulp = require('gulp'),
    connect = require('gulp-connect'),
    open = require("gulp-open"),
    browserify = require('browserify'),
    reactify = require('reactify'),
    source = require("vinyl-source-stream"),
    concat = require('gulp-concat'),
    port = process.env.port || 3031;

// browserify and transform JSX
gulp.task('browserify', function() {
    var b = browserify();
    b.transform(reactify);
    b.add('./app/src/js/main.js');
    return b.bundle()
        .pipe(source('main.js'))
        .pipe(gulp.dest('./app/dist/js'));
});

// launch browser in a port
gulp.task('open', function(){
    var options = {
        url: 'http://localhost:' + port,
    };
    gulp.src('./app/index.html')
    .pipe(open('', options));
});

// live reload server
gulp.task('connect', function() {
    connect.server({
        root: 'app',
        port: port,
        livereload: true
    });
});

// live reload js
gulp.task('js', function () {
    gulp.src('./app/dist/**/*.js')
        .pipe(connect.reload());
});

// live reload html
gulp.task('html', function () {
    gulp.src('./app/*.html')
    .pipe(connect.reload());
});

// watch files for live reload
gulp.task('watch', function() {
    gulp.watch('app/dist/js/*.js', ['js']);
    gulp.watch('app/index.html', ['html']);
    gulp.watch('app/src/js/**/*.js', ['browserify']);
});

gulp.task('default', ['browserify']);

gulp.task('serve', ['browserify', 'connect', 'open', 'watch']);

Мой файл main.js выглядит так:

var React = require('react'),
    Feed = require('./components/Feed');

React.renderComponent(
    <Feed />,
    document.getElementById('app')
);

Файл Feed.js выглядит так:

var React = require('react');
var FeedForm = require('./FeedForm');
var ShowAddButton = require('./ShowAddButton');
var FeedForm = require('./FeedForm');
var FeedList = require('./FeedList');

var Feed = React.createClass({

    getInitialState: function() {
        var FEED_ITEMS = [
            { key: '1', title: 'Just something', description: 'Something else', voteCount: 49 },
            { key: '2', title: 'Some more stuff', description: 'Yeah!', voteCount: 34 },
            { key: '3', title: 'Tea is good', description: 'yepp again', voteCount: 15 },
        ];

        return {
            items: FEED_ITEMS
        };
    },

    render: function() {
        return (
            <div>
                <div className="container">
                    <ShowAddButton />
                </div>

                <FeedForm />

                <br />
                <br />

                <FeedList items={this.state.items} />
            </div>
        );
    }

});

module.exports = Feed;

Я уверен, что упускаю из виду что-то очень простое ... но я занимаюсь этим часами и, похоже, не могу это сделать. Любая помощь будет принята с благодарностью. (Очевидно, я не публикую код для других компонентов ради краткости, насколько это возможно ... но они не проблема).

14
kevindeleon

Ваши имена не совпадают с вашими. Обратите внимание:

$ find app -type f | awk '{print "_"$0"_"}'
_app/dist/js/main.js_
_app/index.html_
_app/src/js/components/Feed.js _
_app/src/js/components/FeedForm.js _
_app/src/js/components/FeedItem.js_
_app/src/js/components/FeedList.js_
_app/src/js/components/ShowAddButton.js_
_app/src/js/main.js_

Ваш файл Feed.js на самом деле Feed.js<SPACE>. То же самое для FeedForm.js. Переименование их делает ваш пример репо стройным.

29
loganfsmyth

Пожалуйста, попробуйте с кодом:

var React = require('react');
var FeedForm = require('./FeedForm.jsx');
var ShowAddButton = require('./ShowAddButton.jsx');
var FeedForm = require('./FeedForm.jsx');
var FeedList = require('./FeedList.jsx');

Мои проблемы решены сразу после добавления расширения файла (.jsx)

Благодаря Sulok

2
Sulok

Может быть, быстрое решение .. 

  "start": "watchify ./src/js/* ./src/jsx/*.jsx -v -t babelify -o ./build/app/bundle.js"

в свой скрипт добавьте * .jsx 

0
Tarandeep Singh