Compile .jsx files instead of .js using babel

无人久伴 提交于 2020-01-01 15:32:15

问题


I'm starting to learn ReactJs, and I was trying to build an environment from scratch using this "builder".

Everything works pretty well, but I'd like to work with .jsx files instead of .js (the text editor screws up otherwise, and ir feels better using a different extension for not-compiled scripts)

However, I didn't manage to compile such .jsx files, it only works with .js files.

This is the configuration files for .babelrc:

{
    "presets":["es2015","react"]
}

And my webpack.config.js:

var path = require('path');

var config = {
    context: path.join(__dirname,'src'),
    entry:[
        './main.js'
    ],
    output:{
        path    :path.join(__dirname,'www'),
        filename:'bundle.js'
    },
    module:{
        loaders:[
            {
                test: /\.js$/,
                exclude:/node_modules/,
                loaders:['babel']
            }
        ],
    },
    resolveLoader:{
        root: [
            path.join(__dirname,'node_modules')
        ]
    },
    resolve:{
        root:[
            path.join(__dirname,'node_modules')
        ]
    }
};

module.exports = config;

I tried simply changing the extensions in the webpack config file from js to jsx, but to no avail. Any ideas?


回答1:


Just replace this line:

test: /\.js$/,

with:

test: /\.jsx$/,

It will run babel loader on the .jsx files, instead of .js files.

If you want to transpile both .js and .jsx, you can set it to /\.jsx?$/, where ? in regex indicates to match 0 or 1 occurrences of the preceding character: test positive for both .js and .jsx.

.test property indicates a condition that must be met to run the loader specified in the loader key. You can read more about module.loader options here.

Also, when importing modules, you should add the .jsx extension, like this:

import Counter from './Counter.jsx';

Or set webpack's resolve.extensions config to add .jsx extension (by default, it looks only for .js files). Like this:

resolve: {
   /* ... */
   extensions: ['', '.js', '.jsx']
 }

This way, you can import your files without the extension:

import Counter from './Counter';


来源:https://stackoverflow.com/questions/41815333/compile-jsx-files-instead-of-js-using-babel

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!