Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

394
Visualizações
¿Cómo requiero () de la consola usando webpack?

¿Cómo requiero ()/importar módulos desde la consola? Por ejemplo, digamos que instalé ImmutableJS npm, me gustaría poder usar las funciones del módulo mientras trabajo en la consola.

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Aquí hay otra forma más genérica de hacer esto.

Requerir un módulo por ID

La versión actual de WebPack expone webpackJsonp(...) , que se puede usar para solicitar un módulo por ID:

 function _requireById(id) { return webpackJsonp([], null, [id]); }

o en mecanografiado

 window['_requireById'] = (id: number): any => window['webpackJsonp'];([], null, [id]);

El ID es visible en la parte superior del módulo en el archivo incluido o en el pie de página del archivo de origen original que se sirve a través de los mapas de origen.

Requerir un módulo por nombre

Requerir un módulo por nombre es mucho más complicado, ya que WebPack no parece mantener ninguna referencia a la ruta del módulo una vez que ha procesado todas las fuentes. Pero el siguiente código parece funcionar en muchos de los casos:

 /** * Returns a promise that resolves to the result of a case-sensitive search * for a module or one of its exports. `makeGlobal` can be set to true * or to the name of the window property it should be saved as. * Example usage: * _requireByName('jQuery', '$'); * _requireByName('Observable', true)´; */ window['_requireByName'] = (name: string, makeGlobal?: (string|boolean)): Promise<any> => getAllModules() .then((modules) => { let returnMember; let module = _.find<any, any>(modules, (module) => { if (_.isObject(module.exports) && name in module.exports) { returnMember = true; return true; } else if (_.isFunction(module.exports) && module.exports.name === name) { return true; } }); if (module) { module = returnMember ? module.exports[name] : module.exports; if (makeGlobal) { const moduleName = makeGlobal === true ? name : makeGlobal as string; window[moduleName] = module; console.log(`Module or module export saved as 'window.${moduleName}':`, module); } else { console.log(`Module or module export 'name' found:`, module); } return module; } console.warn(`Module or module export '${name}'' could not be found`); return null; }); // Returns promise that resolves to all installed modules function getAllModules() { return new Promise((resolve) => { const id = _.uniqueId('fakeModule_'); window['webpackJsonp']( [], {[id]: function(module, exports, __webpack_require__) { resolve(__webpack_require__.c); }}, [id] ); }); }

Este es un primer intento rápido, ¡así que todo se puede mejorar!

over 4 years ago · Santiago Trujillo Relatório

0

Incluir esto en un módulo permitirá que require([modules], function) se use desde un navegador

 window['require'] = function(modules, callback) { var modulesToRequire = modules.forEach(function(module) { switch(module) { case 'immutable': return require('immutable'); case 'jquery': return require('jquery'); } }) callback.apply(this, modulesToRequire); }

Ejemplo de uso:

 require(['jquery', 'immutable'], function($, immutable) { // immutable and $ are defined here });

Nota: Cada opción de declaración de cambio debe ser algo que este módulo ya requiera o proporcionado por ProvidePlugin


Fuentes:

Basado en esta respuesta , que se puede usar para agregar una carpeta completa.

Método alternativo de Webpack Docs , que permite algo como require.yourModule.function()

over 4 years ago · Santiago Trujillo Relatório

0

Encontré una forma que funciona, tanto para WebPack 1 como para 2. (siempre y cuando la fuente no esté minificada)

Repositorio: https://github.com/Venryx/webpack-runtime-require

Instalar

 npm install --save webpack-runtime-require

Uso

Primero, requiere el módulo al menos una vez.

 import "webpack-runtime-require";

Luego agregará una función Require() al objeto de la ventana, para usar en la consola o en cualquier parte de su código.

Entonces solo úsalo, así:

 let React = Require("react"); console.log("Retrieved React.Component: " + React.Component);

No es muy bonito (usa expresiones regulares para buscar las funciones de envoltorio del módulo) o rápido (toma ~50ms la primera llamada y ~0ms después), pero ambos están perfectamente bien si es solo para pruebas de piratería en la consola.

Técnica

La siguiente es una versión recortada de la fuente para mostrar cómo funciona. (ver el repositorio para el completo/más reciente)

 var WebpackData; webpackJsonp([], {123456: function(module, exports, __webpack_require__) { WebpackData = __webpack_require__; }}, [123456] ); var allModulesText; var moduleIDs = {}; function GetIDForModule(name) { if (allModulesText == null) { let moduleWrapperFuncs = Object.keys(WebpackData.m).map(moduleID=>WebpackData.m[moduleID]); allModulesText = moduleWrapperFuncs.map(a=>a.toString()).join("\n\n\n"); // these are examples of before and after webpack's transformation: (which the regex below finds the var-name of) // require("react-redux-firebase") => var _reactReduxFirebase = __webpack_require__(100); // require("./Source/MyComponent") => var _MyComponent = __webpack_require__(200); let regex = /var ([a-zA-Z_]+) = __webpack_require__\(([0-9]+)\)/g; let matches = []; let match; while (match = regex.exec(allModulesText)) matches.push(match); for (let [_, varName, id] of matches) { // these are examples of before and after the below regex's transformation: // _reactReduxFirebase => react-redux-firebase // _MyComponent => my-component // _MyComponent_New => my-component-new // _JSONHelper => json-helper let moduleName = varName .replace(/^_/g, "") // remove starting "_" .replace(new RegExp( // convert chars where: "([^_])" // is preceded by a non-underscore char + "[AZ]" // is a capital-letter + "([^A-Z_])", // is followed by a non-capital-letter, non-underscore char "g"), str=>str[0] + "-" + str[1] + str[2] // to: "-" + char ) .replace(/_/g, "-") // convert all "_" to "-" .toLowerCase(); // convert all letters to lowercase moduleIDs[moduleName] = parseInt(id); } } return moduleIDs[name]; } function Require(name) { let id = GetIDForModule(name); return WebpackData.c[id].exports; }
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda