哪个 babel 插件声明了这个 var?

Posted

技术标签:

【中文标题】哪个 babel 插件声明了这个 var?【英文标题】:Which babel plugin is declaring this var? 【发布时间】:2017-10-01 23:34:54 【问题描述】:

我正在尝试启动auth0-lock 这个electron project。

在 auth0 的嵌套依赖项之一 (node-formidable) 中,文件顶部有这一行:

if (global.GENTLY) require = GENTLY.hijack(require);

这是他们用来测试覆盖全局要求的东西,但是将global.GENTLY 设置为 false 应该绕过它进入开发模式。

然而,这个项目的 webpack/babel 配置(如下)中的某些东西正在将这一行更改为:

var require;if (global.GENTLY) require = GENTLY.hijack(require);

这将覆盖全局 require 并使用 require is not a function 破坏文件/构建的其余部分

我正在逐一浏览插件以查找正在执行此操作的内容,但到目前为止什么也没做。

有人知道什么设置会导致这种覆盖吗?

// .babelrc

  "presets": [
    ["env", 
      "targets":  "node": 6 ,
      "useBuiltIns": true
    ],
    "stage-0",
    "react"
  ],
  "plugins": ["add-module-exports", "dynamic-import-webpack"],
  "env": 
    "production": 
      "presets": ["react-optimize"],
      "plugins": ["babel-plugin-dev-expression"]
    ,
    "development": 
      "plugins": [
        "transform-class-properties",
        "transform-es2015-classes",
        "react-hot-loader/babel",
        ["flow-runtime", 
          "assert": true,
          "annotate": true
        ]
      ]
    
  



// webpack config

/* eslint global-require: 0, import/no-dynamic-require: 0 */

/**
 * Build config for development electron renderer process that uses
 * Hot-Module-Replacement
 *
 * https://webpack.js.org/concepts/hot-module-replacement/
 */

import path from 'path';
import fs from 'fs';
import webpack from 'webpack';
import chalk from 'chalk';
import merge from 'webpack-merge';
import  spawn, execSync  from 'child_process';
import ExtractTextPlugin from 'extract-text-webpack-plugin';
import baseConfig from './webpack.config.base';

const port = process.env.PORT || 1212;
const publicPath = `http://localhost:$port/dist`;
const dll = path.resolve(process.cwd(), 'dll');
const manifest = path.resolve(dll, 'vendor.json');

/**
 * Warn if the DLL is not built
 */
if (!(fs.existsSync(dll) && fs.existsSync(manifest))) 
  console.log(chalk.black.bgYellow.bold(
    'The DLL files are missing. Sit back while we build them for you with "npm run build-dll"'
  ));
  execSync('npm run build-dll');


export default merge.smart(baseConfig, 
  devtool: 'inline-source-map',

  target: 'electron-renderer',

  entry: [
    'react-hot-loader/patch',
    `webpack-dev-server/client?http://localhost:$port/`,
    'webpack/hot/only-dev-server',
    path.join(__dirname, 'app/index.js'),
  ],

  output: 
    publicPath: `http://localhost:$port/dist/`
  ,

  module: 
    rules: [
      
        test: /\.global\.css$/,
        use: [
          
            loader: 'style-loader'
          ,
          
            loader: 'css-loader',
            options: 
              sourceMap: true,
            ,
          
        ]
      ,
      
        test: /^((?!\.global).)*\.css$/,
        use: [
          
            loader: 'style-loader'
          ,
          
            loader: 'css-loader',
            options: 
              modules: true,
              sourceMap: true,
              importLoaders: 1,
              localIdentName: '[name]__[local]__[hash:base64:5]',
            
          ,
        ]
      ,
      // Add SASS support  - compile all .global.scss files and pipe it to style.css
      
        test: /\.global\.scss$/,
        use: [
          
            loader: 'style-loader'
          ,
          
            loader: 'css-loader',
            options: 
              sourceMap: true,
            ,
          ,
          
            loader: 'sass-loader'
          
        ]
      ,
      // Add SASS support  - compile all other .scss files and pipe it to style.css
      
        test: /^((?!\.global).)*\.scss$/,
        use: [
          
            loader: 'style-loader'
          ,
          
            loader: 'css-loader',
            options: 
              modules: true,
              sourceMap: true,
              importLoaders: 1,
              localIdentName: '[name]__[local]__[hash:base64:5]',
            
          ,
          
            loader: 'sass-loader'
          
        ]
      ,
      // WOFF Font
      
        test: /\.woff(\?v=\d+\.\d+\.\d+)?$/,
        use: 
          loader: 'url-loader',
          options: 
            limit: 10000,
            mimetype: 'application/font-woff',
          
        ,
      ,
      // WOFF2 Font
      
        test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/,
        use: 
          loader: 'url-loader',
          options: 
            limit: 10000,
            mimetype: 'application/font-woff',
          
        
      ,
      // TTF Font
      
        test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,
        use: 
          loader: 'url-loader',
          options: 
            limit: 10000,
            mimetype: 'application/octet-stream'
          
        
      ,
      // EOT Font
      
        test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,
        use: 'file-loader',
      ,
      // SVG Font
      
        test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
        use: 
          loader: 'url-loader',
          options: 
            limit: 10000,
            mimetype: 'image/svg+xml',
          
        
      ,
      // Common Image Formats
      
        test: /\.(?:ico|gif|png|jpg|jpeg|webp)$/,
        use: 'url-loader',
      
    ]
  ,

  plugins: [
    new webpack.DllReferencePlugin(
      context: process.cwd(),
      manifest: require(manifest),
      sourceType: 'var',
    ),

    /**
     * https://webpack.js.org/concepts/hot-module-replacement/
     */
    new webpack.HotModuleReplacementPlugin(
      // @TODO: Waiting on https://github.com/jantimon/html-webpack-plugin/issues/533
      // multiStep: true
    ),

    new webpack.NoEmitOnErrorsPlugin(),

    /**
     * Create global constants which can be configured at compile time.
     *
     * Useful for allowing different behaviour between development builds and
     * release builds
     *
     * NODE_ENV should be production so that modules do not perform certain
     * development checks
     *
     * By default, use 'development' as NODE_ENV. This can be overriden with
     * 'staging', for example, by changing the ENV variables in the npm scripts
     */
    new webpack.DefinePlugin(
      'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development')
    ),

    new webpack.LoaderOptionsPlugin(
      debug: true
    ),

    new ExtractTextPlugin(
      filename: '[name].css'
    ),
  ],

  devServer: 
    port,
    publicPath,
    compress: true,
    noInfo: true,
    stats: 'errors-only',
    inline: true,
    lazy: false,
    hot: true,
    headers:  'Access-Control-Allow-Origin': '*' ,
    contentBase: path.join(__dirname, 'dist'),
    watchOptions: 
      aggregateTimeout: 300,
      poll: 100
    ,
    historyApiFallback: 
      verbose: true,
      disableDotRule: false,
    ,
    setup() 
      if (process.env.START_HOT) 
        spawn(
          'npm',
          ['run', 'start-hot-renderer'],
           shell: true, env: process.env, stdio: 'inherit' 
        )
        .on('close', code => process.exit(code))
        .on('error', spawnError => console.error(spawnError));
      
    
  ,
);

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,通过将此插件添加到我的 webpack 配置(webpack v4)中解决了它:

new webpack.DefinePlugin( 'global.GENTLY': false )

希望他们很快会发布带有修复程序的强大@2。

【讨论】:

以上是关于哪个 babel 插件声明了这个 var?的主要内容,如果未能解决你的问题,请参考以下文章

babel 中继插件 - es6 配置

如何使用 babel 插件将 commonjs 转换为 es2015 模块?

如何将jQuery插件导入babel应用程序

webpack使用babel插件的使用

快速写一个babel插件

安装 ES2018 object spread operator babel 插件报错