usar tutorial react con webpack cdn production webpack-externals

tutorial - Cómo utilizar una biblioteca desde un CDN en un proyecto de Webpack en producción



webpack vs gulp (3)

Me gustaría usar react.min.js desde un CDN en producción (por ejemplo, https://unpkg.com/[email protected]/dist/react.min.js )

¿Cuál es la mejor manera de hacer que Webpack transforme mi import React from ''react'' declaraciones import React from ''react'' en const React = window.React lugar de construir node_modules/react en el paquete?

Lo he estado haciendo con resolve.alias como esta:

En index.html :

<head> <script type="text/javascript" src="https://unpkg.com/[email protected]/dist/react.min.js"></script> <script type="text/javascript" src="/assets/bundle.js"></script> </head>

En webpack.prod.config.js :

alias: { react$: ''./getWindowReact'', },

getWindowReact.js :

module.exports = window.React;

Nota : En la pregunta anterior, no me di cuenta de que construir React en un paquete de NODE_ENV=production con NODE_ENV=production eliminaría las comprobaciones de los propTypes . Una de las respuestas se centra en eso.


Creé https://github.com/mastilver/dynamic-cdn-webpack-plugin que está haciendo exactamente eso fuera de la caja

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() ] }

Agregará dinámicamente las direcciones URL de unpkg.org y agregará el código apropiado en su paquete para cargar las bibliotecas de global


En la configuración de su paquete web puede usar la opción de elementos externals que importará el módulo del entorno en lugar de intentar resolverlo normalmente:

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

Lea más aquí: https://webpack.js.org/configuration/externals/


Todas las partes del código de React solo para desarrollo, como las comprobaciones PropType, están protegidas con:

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

Para eliminarlos de React en su propia compilación, creando el equivalente de la compilación React minificada en su propio paquete, use DefinePlugin para reemplazar las referencias a process.env.NODE_ENV con "production" .

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

La eliminación del código muerto de Uglify luego lo eliminará todo, ¡ya que detectará que el código envuelto con una "production" !== "production" control de "production" !== "production" es inalcanzable.