tldr: Jestem w stanie require
wszystko, aby uruchomić aplikację, ale gdybym require
moduły z poziomu testu (który jest w aplikacji - patrz dir struktury poniżej) plik, cały łańcuch zależności ulega uszkodzeniu.utworzyć punkt wejścia Test w WebPacka reagować aplikacja
Mam pewne trudności require
-ing komponenty z mojego katalogu app/test
(w moim WebPACK aplikacji React.js) poniżej, że nie mam żadnych trudności require
-ing z jakiegokolwiek innego pliku w folderze /app
. Jest to struktura katalogów
app
/components/checkout.jsx
/components/button.jsx
/test/test.js
index.jsx
dist
node_modules
webpack.config.js
package.json
w moich webpack.config.js, mam to setup używać JSX-ładowarka do mojego React wniosku jak ten
entry: {
app: "./app/index"
},
module: {
loaders: [
{
test: /\.jsx$/,
loader: 'jsx-loader?insertPragma=React.DOM&harmony',
}
]
},
resolve: {
extensions: ['', '.js', '.jsx']
}
Pozwala mi to wymagać pliki kończące w rozszerzeniu .jsx. Na przykład, w /app/index.jsx
wymagam /app/components/checkout.jsx
wykonując
var Checkout = require('./components/Checkout')
i wewnątrz /app/components/checkout.jsx
, wymagam przycisk
var Button = require('./components/Button')
więc kiedy wymagają Checkout
z index.jsx, to uchwyty wymagać od Przycisk bez problemu.
Jednak z aplikacji/test/test.js, robię
var Checkout = require('../components/Checkout')
i WebPack nie można znaleźć składnika Checkout. Kiedy przeglądam testy na serwerze deweloperskim webpack, nie pokazuje to, że szukano rozszerzenia pliku .jsx. To poszukiwanej
app/components/Checkout
app/components/Checkout.webpack.js
app/components/Checkout.web.js
app/components/Checkout.js
app/components/Checkout.json
Dlatego starałem się używać jsx-loader
inline jak ten
var Checkout = require(jsx-loader!'../components/Checkout')
z katalogu testowego i WebPack mogą teraz znaleźć plik, ale zgłasza błąd mówiąc, że nie można rozwiązać przycisk służący do realizacji płatności requires
. Innymi słowy, gdy używam require
z folderu app/test
, cały łańcuch zależności jest wyrzucany z synchronizacji.
Jak mogę zmienić mój webpack.config.js, aby móc wymagać plików aplikacji w moich testach z tą strukturą katalogów, lub, bardziej ogólnie, jak skonfigurować Webpack, aby wymagał pliku aplikacji w teście?
Aktualizacja
Struktura projektu
/app
/test/test.js
/index.jsx
/components/checkout.jsx (and button.jsx)
/dist
/node_modules
package.json
webpack.config.js
cały 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')
]
}
Jak skonfigurowałeś konfigurację WebPacka do uruchamiania testów, czy jest taki sam czy oddzielny od głównego? w moim setupie używam 2 różnych konfiguracji do uruchamiania buildów dev i reagowania na testy. Rozwiązaniem podobnego problemu było dodanie rozwiązania: {extensions: [',' .js ',' .jsx ']} w pakiecie sieci Web do uruchamiania testów. –
@EugeneSafronov w tej chwili mam tylko jedną konfigurację Webpack na najwyższym poziomie projektu. Umieściłem jej kopię w dziale aktualizacji OP, a także więcej szczegółów na temat struktury projektu. Myślałem o używaniu drugiej konfiguracji do testów, ale nie wiedziałem, gdzie ją umieścić i jak ją skonfigurować. Czy możesz podać trochę informacji na ten temat? – Leahcim
czy nie brakuje "include: __dirname" w ładowarkach? spróbuj także: '/ \. jsx? $ /' – knowbody