Grunt-Browserify扩展标记不起作用

时间:2015-02-08 12:33:28

标签: javascript gruntjs grunt-browserify

我正在尝试使用Grunt-browserify并重新解析来解析和捆绑用jsx编写的React组件。我想使用扩展标志,以便我不必指定我的模块的文件扩展名,但我无法让它工作。这是一些测试代码:

Gruntfile:

'use strict';
module.exports = function(grunt) {

    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        browserify: {
            dev: {
                src: 'src/app.jsx',
                dest: 'dest/app.js',
                options: {
                    debug: true,
                    transform: ['reactify'],
                    extensions: ['.jsx']
                }
            }
        }
    });

    grunt.loadNpmTasks('grunt-browserify');

    grunt.registerTask('default', ['browserify:dev']);

};

主应用文件app.jsx

'use strict';
var React = require('react');
var Test = require('./components/Test');   // Here is the problem... 

React.render(
    <Test />,
    document.getElementById('test')
);

然后Test.jsx

'use strict';
var React = require('react');

var Test = React.createClass({

    render: function() {
        return(
            <div>
            <p>Some markup</p>
            </div>
        );
    }
});

module.exports = Test;

当我尝试通过运行grunt来编译它时,我收到一个错误:

  

错误:无法从'/ Users / **** / Sites / grunt-test / src'中找到模块'./components/Test'

Grunt-browserify documentation表示它支持自v1.2.6以来的扩展标志,我已经在网络上看到过这个例子,但我似乎无法在这里工作。如果我从命令行运行browserify - 就像browserify -t reactify --extension=.jsx -o dest/app.js那样 - 它可以工作。

有什么想法吗?

1 个答案:

答案 0 :(得分:10)

您是否尝试过在browserifyOptions中移动属性,如下所示?

grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        browserify: {
            dev: {
                src: 'src/app.jsx',
                dest: 'dest/app.js',
                options: {
                    browserifyOptions: {
                        debug: true,
                        transform: ['reactify'],
                        extensions: ['.jsx']
                    }
                }
            }
        }
    });