如何在生产中的Webpack项目中使用CDN中的库

And*_*ndy 37 production cdn webpack webpack-externals

我想react.min.js在生产中使用CDN(例如https://unpkg.com/react@15.3.1/dist/react.min.js)

让Webpack将我的import React from 'react'语句转换为const React = window.React而不是构建node_modules/react到bundle中的最佳方法是什么?

我一直这样做resolve.alias:

index.html:

<head>
  <script type="text/javascript" src="https://unpkg.com/react@15.3.1/dist/react.min.js"></script>
  <script type="text/javascript" src="/assets/bundle.js"></script>
</head>
Run Code Online (Sandbox Code Playgroud)

webpack.prod.config.js:

alias: {
  react$: './getWindowReact',
},
Run Code Online (Sandbox Code Playgroud)

getWindowReact.js:

module.exports = window.React;
Run Code Online (Sandbox Code Playgroud)

注意:在旧的问题中,我没有意识到将React构建到Webpack包中NODE_ENV=production会剥离propTypes检查.其中一个答案侧重于此.

fra*_*nky 29

在您的webpack配置中,您可以使用externals从环境导入模块的选项,而不是尝试正常解析它:

// webpack.config.js
module.exports = {
  externals: {
    'react': 'React'
  }
  ...
};
Run Code Online (Sandbox Code Playgroud)

在这里阅读更多内容:https: //webpack.js.org/configuration/externals/

  • @Andy我可能不完全理解您的评论,但是这里建议的内容并不要求要使用Webpack构建正在加载的库。所有这些“外部”示例所做的就是告诉webpack“如果模块请求`react`,则返回`window.React`”。 (2认同)

mas*_*ver 10

我创建了https://github.com/mastilver/dynamic-cdn-webpack-plugin,它完全是开箱即用的

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 ModulesCDNWebpackPlugin()
  ]
}
Run Code Online (Sandbox Code Playgroud)

将动态添加unpkg.org网址并在您的包中添加适当的代码以从中加载librairies global