在Babel 7中包括一些node_modules目录 [英] Include some node_modules directories in Babel 7

查看:1144
本文介绍了在Babel 7中包括一些node_modules目录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在node_modules中有一个依赖关系,需要通过Babel进行编译.升级堆栈后,我无法使Babel恢复编译.

I have a dependency in node_modules that needs to be compiled through Babel. I don't manage to get Babel back to compiling after upgrading my stack.

当前版本:

  • @ babel/core 7.5.4
  • webpack 2.7.0

webpack.config.js:

webpack.config.js:

const path = require('path');

module.exports = {
    devtool: 'cheap-module-source-map',
    context: path.resolve('resources/assets/js/'),
    entry: ['./index'],
    output: {
        path: path.resolve('public/js'),
        filename: 'index.js'
    },
    module: {
        rules: [
            {
                include: [
                    path.resolve('resources/assets/js/'),
                    path.resolve('node_modules/mydep/'),
                ],
                exclude: /node_modules\/(?!mydep).+/,
                test: /\.js|jsx$/,
                use: { loader: 'babel-loader' }
            }
        ]
    },
    resolve: {
        modules: [
            path.resolve('./resources/assets/js/'),
            'node_modules'
        ]
    },
    watchOptions: {
        aggregateTimeout: 300,
        ignored: [
            /node_modules([\\]+|\/)+(?!mydep)/,
            /\mydep([\\]+|\/)node_modules/
        ]
    }
};

.babelrc:

{
  "presets": [
    ["@babel/preset-env", {
      "debug": true,
      "useBuiltIns": "usage"
    }],
    "@babel/preset-react"
  ]
}

我在第一个JSX标签顶部得到的错误:

The error I get at the top of first JSX tag :

ERROR in /var/www/node_modules/mydep/somedir/app/index.js
Module build failed (from /var/www/node_modules/babel-loader/lib/index.js):
SyntaxError: /var/www/node_modules/mydep/somedir/app/index.js: Unexpected token (160:15)

  158 |         registerReducers();
  159 |         new SomeClass('acquisition');
> 160 |         return <SomeComponent />

推荐答案

我终于明白了这一点.

package.json

package.json

{
  "name": "someproject",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "browserslist": "> 0.25% in DE, not dead",
  "directories": {
    "test": "tests"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 0"
  },
  "private": true,
  "dependencies": {
    "@babel/core": "^7.5.4",
    "@babel/plugin-proposal-class-properties": "^7.5.0",
    "@babel/preset-env": "^7.5.4",
    "@babel/preset-react": "^7.0.0",
    "babel-loader": "^8.0.6",
    "browserify": "^16.2.0",
    "core-js": "^3.1.4",
    "minify": "^3.0.5",
    "somedeps": "ssh://git@bitbucket.org:somedeps.git",
    "regenerator-runtime": "^0.13.2",
    "webpack": "^4.35.3",
    "webpack-cli": "^3.3.6"
  }
}

webpack.config.js

webpack.config.js

const path = require('path');


module.exports = {
    devtool: 'cheap-module-source-map',
    context: path.resolve('resources/assets/js/'),
    entry: ['./index'],
    output: {
        path: path.resolve('public/js'),
        filename: 'index.js'
    },
    module: {
        rules: [
            {
                test: /\.js|jsx$/,
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: [
                            ["@babel/preset-env", {
                                useBuiltIns: 'entry',
                                corejs: 3
                            }],
                            "@babel/preset-react"
                        ],
                        plugins: [
                            "@babel/plugin-proposal-class-properties",
                        ],
                        include: [
                            path.resolve('resources/assets/js/'),
                            path.resolve('node_modules/somedeps/'),
                        ],
                        exclude: /node_modules\/(?!somedeps).+/
                    }
                }
            }
        ]
    },
    resolve: {
        modules: [
            path.resolve('./resources/assets/js/'),
            'node_modules'
        ]
    },
    watchOptions: {
        aggregateTimeout: 300,
        ignored: [
            /node_modules([\\]+|\/)+(?!somedeps)/,
            /\somedeps([\\]+|\/)node_modules/
        ]
    }
};

在应用程序主文件的顶部,这里resources/assets/js/index.js包括:

At the top of your app main file, here resources/assets/js/index.js, include:

require('core-js');
require('regenerator-runtime/runtime');

这篇关于在Babel 7中包括一些node_modules目录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆