使用browserify,gulp,react.js接收'错误:无法找到模块'

kev*_*eon 14 javascript node.js browserify reactjs gulp

所以我一直在玩React.js,gulp和browserify.一切都很好,直到我尝试在我的main.js文件中需要一个模块.我要求其他文件中的组件/模块没有问题(见下文),但是当我尝试在我的main.js文件中需要一个时,我在运行时收到以下错误gulp serve:

错误:无法从/ Users/kevin/Documents/MyWork/web/react/node_modules/browserify中的'/ Users/kevin/Documents/MyWork/web/react/app/src/js'找到模块'./components/Feed' /node_modules/resolve/lib/async.js:55:21 at load(/Users/kevin/Documents/MyWork/web/react/node_modules/browserify/node_modules/resolve/lib/async.js:69:43)atx (/Users/kevin/Documents/MyWork/web/react/node_modules/browserify/node_modules/resolve/lib/async.js:92:31)位于/ Users/kevin/Documents/MyWork/web/react/node_modules/browserify /在Object.oncomplete(fs.js:107:15)中的node_modules/resolve/lib/async.js:22:47

如果我从中删除require(for Feed.js)语句main.js,那么所有内容都会编译并放入相应的dist文件夹并运行正常(当然,react.js会抱怨缺少模块).

首先,我的文件夹结构如下所示:

app
?-- gulpfile.js
?-- package.json
?
????src
?   ?
?   ????js
?       ?-- main.js
?       ????components
?            ?-- Feed.js
?            ?-- FeedList.js
?            ?-- FeedItem.js
?            ?-- FeedForm.js
?            ?-- ShowAddButton.js
?            ?
?   
????dist
Run Code Online (Sandbox Code Playgroud)

我的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']);
Run Code Online (Sandbox Code Playgroud)

我的main.js文件如下所示:

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

React.renderComponent(
    <Feed />,
    document.getElementById('app')
);
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)

我确定我忽略了一些非常简单的东西......但是我已经在这里待了好几个小时了,似乎无法破解它.任何帮助将不胜感激.(显然我不是为了尽可能简短地发布其他组件的代码......但它们不是问题).

log*_*yth 30

您的文件名不是您认为的.请注意:

$ 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_
Run Code Online (Sandbox Code Playgroud)

你的Feed.js文件实际上是Feed.js<SPACE>.同样的FeedForm.js.重命名它们使您的示例repo构建正常.

  • 哇!我很好奇你是怎么注意到的:-) (4认同)
  • 神圣的废话人......非常感谢!我不知道那是怎么回事.你救了我几个小时!我觉得自己像个笨蛋.:( (2认同)