How to use a library from a CDN in a Webpack project in production

前端 未结 3 1929
太阳男子
太阳男子 2020-11-30 02:16

I\'d like to use react.min.js from a CDN in production (e.g. https://unpkg.com/react@15.3.1/dist/react.min.js)

What is the best way to get Webpack to tr

相关标签:
3条回答
  • 2020-11-30 02:55

    I created https://github.com/mastilver/dynamic-cdn-webpack-plugin which is doing exactly that out of the box

    const path = require('path')
    const HTMLWebpackPlugin = require('html-webpack-plugin')
    const DynamicCDNWebpackPlugin = require('dynamic-cdn-webpack-plugin')
    
    module.exports = {
      entry: './main.js',
      output: {
        path: path.join(__dirname, 'build'),
        filename: 'bundle.js'
      },
      module: {
        rules: [
          {
            test: /\.js$/,
            exclude: /node_modules/,
            use: {
              loader: 'babel-loader'
            }
          }
        ]
      },
      plugins: [
        new HTMLWebpackPlugin(),
        new DynamicCDNWebpackPlugin()
      ]
    }
    

    Will dynamically add unpkg.org urls and add the appropriate code in your bundle to load librairies from global

    0 讨论(0)
  • 2020-11-30 02:56

    All the development-only portions of the React codebase, such as PropType checks, are guarded with:

    if ("production" !== process.env.NODE_ENV) {
      ..
    }
    

    To strip these out from React in your own build, creating the equivalent of the minified React build in your own bundle, use DefinePlugin to replace references to process.env.NODE_ENV with "production".

    plugins: [
      // ...
      new webpack.DefinePlugin({
        'process.env.NODE_ENV': JSON.stringify('production')
      }),
      new webpack.optimize.UglifyJsPlugin({
        compressor: {
          warnings: false
        }
      })
      // ...
    ],
    

    Uglify's dead code elimination will then strip it all out, as it will detect that code wrapped with a "production" !== "production" check is unreachable.

    0 讨论(0)
  • 2020-11-30 03:08

    In your webpack config you can use the externals option which will import the module from the environment instead of trying to resolve it normally:

    // webpack.config.js
    module.exports = {
      externals: {
        'react': 'React'
      }
      ...
    };
    

    Read more here: https://webpack.js.org/configuration/externals/

    0 讨论(0)
提交回复
热议问题