2017-04-10 5 views
12

J'ai installé proxyquire et mon fichier ajax.test.tsx contient le code suivant, à seulement 2 lignesProxyquire avec webpack ne compilent pas

import * as proxyquire from 'proxyquire'; 
proxyquire.noCallThru(); 

Mon code webpack est le suivant

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' 
    } 
}; 

J'ai installé proxyquire & @ types/proxyquire. Quand je lance la commande webpack il jette l'erreur suivante

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' 

Répondre

0

Dans votre webpack.config.js changer la ligne suivante:

{ test: /\.tsx?$/, loader: "awesome-typescript-loader" }

à:

{ test: /\.tsx?$/, loader: "awesome-typescript-loader", exclude: /node_modules/ }

Cela devrait résoudre votre problème.

1

Proxyquire est construit pour "système modulaire Node.js", pas un de l'webpack. Vous devez utiliser quelque chose compatible avec "frontend" - injecteur-chargeur ou webpack-rewire.

Si vous ne respectez pas la simplicité des chargeurs *, vous pouvez essayer rewiremock. Il a la syntaxe proxyquire-like et peut fonctionner à la fois dans node.js et dans l'environnement webpack.