reactjs - Proxyquire con webpack no compila
typescript (3)
He instalado proxyquire y mi archivo ajax.test.tsx contiene el siguiente código, solo 2 líneas
import * as proxyquire from ''proxyquire'';
proxyquire.noCallThru();
Mi código de paquete web es el siguiente
module.exports = {
entry: {
"book.service": ''./src/book.service.ts'',
"ajax.test": ''./src/ajax.test.tsx''
},
output: {
filename: "[name].js",
path: __dirname + "/dist"
},
devtool: "source-map",
watch: true,
resolve: {
extensions: [".tsx", ".tsx", ".js", ".json", ".ts", ''.d.ts'']
},
module: {
rules: [
{ test: //.tsx?$/, loader: "awesome-typescript-loader" },
{ enforce: "pre", test: //.js$/, loader: "source-map-loader" }
]
},
externals: {
''react/lib/ExecutionEnvironment'': true,
''react/addons'': true,
''react/lib/ReactContext'': ''window''
}
};
Instalé proxyquire y @ types / proxyquire. Cuando ejecuto el comando webpack arroja el siguiente error
WARNING in ./~/proxyquire/lib/proxyquire.js
require.extensions is not supported by webpack. Use a loader instead.
@ ./~/proxyquire/index.js 3:17-44
@ ./src/ajax.test.tsx
ERROR in ./~/proxyquire/lib/proxyquire.js
Module not found: Error: Can''t resolve ''module'' in ''***/node_modules/pr
oxyquire/lib''
En su webpack.config.js cambie la siguiente línea:
{ test: //.tsx?$/, loader: "awesome-typescript-loader" }
a:
{ test: //.tsx?$/, loader: "awesome-typescript-loader", exclude: /node_modules/ }
Eso debería arreglar tu problema.
Proxyquire está diseñado para el "sistema de módulo node.js", no para el de la carpeta web. Tienes que usar algo compatible con "frontend" - inject-loader o webpack-rewire.
Si no respetas la simplicidad de * -loaders, puedes probar rewiremock . Tiene una sintaxis similar a proxyquire y puede funcionar tanto en el entorno node.js como en el webpack.
proxyquire no es compatible con el paquete web - https://github.com/thlorenz/proxyquire/issues/62
Problema
Proxyquire utiliza require.extensions que no es compatible con el paquete web.
Alternativas