TLDR: Sono in grado di require
di tutto per rendere la corsa app, ma se mi require
moduli dall'interno di un test (che è in app - vedere la struttura dir di seguito) file, l'intera catena di dipendenze si rompe.creare un punto di ingresso di prova a reagire webpack applicazione
sto avendo qualche difficoltà require
-ing componenti dalla mia directory app/test
(nel mio webpack applicazione React.js) al di sotto che non ho difficoltà a require
-ing da qualsiasi altro file nella cartella /app
. Questa è la struttura di directory
app
/components/checkout.jsx
/components/button.jsx
/test/test.js
index.jsx
dist
node_modules
webpack.config.js
package.json
nei miei webpack.config.js, ce l'ho messa a punto di utilizzare la JSX-loader per la mia applicazione Reagire come questo
entry: {
app: "./app/index"
},
module: {
loaders: [
{
test: /\.jsx$/,
loader: 'jsx-loader?insertPragma=React.DOM&harmony',
}
]
},
resolve: {
extensions: ['', '.js', '.jsx']
}
Questo mi permette di richiedere i file con estensione in estensione .jsx. Per esempio, in /app/index.jsx
richiedo /app/components/checkout.jsx
facendo
var Checkout = require('./components/Checkout')
E dentro /app/components/checkout.jsx
, richiedo il pulsante
var Button = require('./components/Button')
così quando richiedo il Checkout
dalla index.jsx, gestisce l'richiedono del Pulsante senza alcun problema.
Tuttavia, dalle app/test/test.js, faccio
var Checkout = require('../components/Checkout')
e webpack non riesco a trovare il componente di Checkout. Quando visualizzo i test nel server di sviluppo webpack, non viene mostrato che l'estensione del file .jsx è stata cercata. Si cercato
app/components/Checkout
app/components/Checkout.webpack.js
app/components/Checkout.web.js
app/components/Checkout.js
app/components/Checkout.json
Pertanto, ho cercato di usare il jsx-loader
inline come questo
var Checkout = require(jsx-loader!'../components/Checkout')
dalla directory di prova, e webpack può ora trovare il file, ma genera un errore dicendo che non può risolvere il pulsante che controlla requires
. In altre parole, quando utilizzo lo require
dalla cartella app/test
, l'intera catena di dipendenze viene espulsa dalla sincronizzazione.
Come posso modificare il mio webpack.config.js per poter richiedere i file dell'applicazione nei miei test con questa struttura di directory o, più in generale, come configurare il webpack per richiedere un file dell'applicazione in un test?
Aggiornamento
Struttura del progetto
/app
/test/test.js
/index.jsx
/components/checkout.jsx (and button.jsx)
/dist
/node_modules
package.json
webpack.config.js
tutta webpack config
var webpack = require('webpack');
module.exports = {
context: __dirname + "/app",
entry: {
vendors: ["d3", "jquery"],
app: "index"
// app: "./app/index"
},
output: {
path: './dist',
filename: 'bundle.js', //this is the default name, so you can skip it
//at this directory our bundle file will be available
//make sure port 8090 is used when launching webpack-dev-server
publicPath: 'http://localhost:8090/assets/'
},
externals: {
//don't bundle the 'react' npm package with our bundle.js
//but get it from a global 'React' variable
'react': 'React'
// 'd3': 'd3'
},
resolve: {
modulesDirectories: ['app', 'node_modules'],
extensions: ['', '.js', '.jsx'],
resolveLoader: { fallback: __dirname + "/node_modules" },
root: ['/app', '/test']
},
module: {
loaders: [
{
test: /\.jsx$/,
loader: 'jsx-loader?insertPragma=React.DOM&harmony',
}
]
},
plugins: [
// definePlugin,
new webpack.optimize.CommonsChunkPlugin('vendors', 'vendors.js')
]
}
come è stata configurata la configurazione di webpack per eseguire i test, è la stessa o separata dalla principale? nel mio setup sto usando 2 diverse configurazioni per eseguire build di sviluppatori e test di reazione. La soluzione per il problema simile era di aggiungere la risoluzione: {extensions: ['', '.js', '.jsx']} nel webpack per eseguire test. –
@EugeneSafronov in questo momento ho solo una configurazione webpack al livello più alto del progetto. Ne ho messo una copia nella sezione di aggiornamento dell'OP, oltre a maggiori dettagli sulla struttura del progetto. Ho pensato di usare una seconda configurazione per i test, ma non sapevo dove metterla o come configurarla. Puoi fornire alcune informazioni a riguardo? – Leahcim
non ti manca 'include: __dirname' nei tuoi caricatori? prova anche: '/ \. jsx? $ /' – knowbody