Skip to content

Instantly share code, notes, and snippets.

@mzvast
Last active August 13, 2018 03:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mzvast/d24cf8266eb5ed5572dfb1dd65bccf9f to your computer and use it in GitHub Desktop.
Save mzvast/d24cf8266eb5ed5572dfb1dd65bccf9f to your computer and use it in GitHub Desktop.
vue jsx webpack flow config

依赖安装

yarn add -D \
babel-plugin-syntax-flow \
babel-plugin-transform-class-properties \
babel-plugin-transform-flow-strip-types \
babel-plugin-transform-es3-member-expression-literals \
babel-plugin-transform-es3-property-literals \
babel-plugin-transform-object-assign\
babel-plugin-transform-object-rest-spread \
babel-plugin-transform-runtime \
babel-plugin-transform-vue-jsx \
babel-preset-env \
vue-jsx-hot-loader

配置webpack

const getBabelCommonConfig = require('./getBabelCommonConfig.min.js');
const babelConfig = getBabelCommonConfig(false);


    module: {
        rules: [
          ...
            {
                test: /\.js$/,
                use: 'babel-loader',
                exclude: /node_modules/
                // options: babelConfig
            },
            {
                test: /\.jsx$/,
                exclude: /node_modules/,
                use: [
                    {
                        loader: 'vue-jsx-hot-loader'
                    },
                    {
                        loader: 'babel-loader',
                        options: babelConfig
                    }
                ],
                
            },
          
        ]
    },

    resolve: {
        ...
        extensions: ['.js', '.jsx', '.vue', '.json', '.css', '.node']
    }
};

配置bebel-loader

//getBabelCommonConfig.js
module.exports = function(modules) {
    const plugins = [
        require.resolve('babel-plugin-transform-flow-strip-types'),
        require.resolve('babel-plugin-syntax-flow'),
        require.resolve('babel-plugin-transform-vue-jsx'),
        require.resolve(
            'babel-plugin-transform-es3-member-expression-literals'
        ),
        require.resolve('babel-plugin-transform-es3-property-literals'),
        require.resolve('babel-plugin-transform-object-assign'),
        require.resolve('babel-plugin-transform-object-rest-spread'),
        require.resolve('babel-plugin-transform-class-properties')
    ];
    plugins.push([
        require.resolve('babel-plugin-transform-runtime'),
        {
            polyfill: false
        }
    ]);
    return {
        presets: [
            [
                require.resolve('babel-preset-env'),
                {
                    modules,
                    targets: {
                        browsers: [
                            'last 2 versions',
                            'Firefox ESR',
                            '> 1%',
                            'ie >= 9',
                            'iOS >= 8',
                            'Android >= 4'
                        ]
                    }
                }
            ]
        ],
        plugins,
        env: {
            test: {
                plugins: [require.resolve('babel-plugin-istanbul')]
            }
        }
    };
};

.babelrc

{
    "env": {
        "test": {
            "presets": [["env", {"targets": {"node": "current"}}]],
            "plugins": [
                "syntax-flow",
                "transform-flow-strip-types",
                "transform-vue-jsx",
                "transform-object-assign",
                "transform-object-rest-spread",
                "transform-class-properties",
                "transform-runtime"
            ]
        }
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment