TLDR WebPack bir test giriş noktası oluşturmanız Dosya, tüm bağımlılık zinciri kırılır.uygulama tepki
(benim webpack React.js uygulamasında) bazı zorluklar require
benim app/test
dizinden bileşenleri -ing yaşıyorum bunun altında ben /app
klasörde başka dosyadan -ing hiçbir zorluk require
var. Bu dizin yapısı benim webpack.config.js içinde
app
/components/checkout.jsx
/components/button.jsx
/test/test.js
index.jsx
dist
node_modules
webpack.config.js
package.json
, ben bu
entry: {
app: "./app/index"
},
module: {
loaders: [
{
test: /\.jsx$/,
loader: 'jsx-loader?insertPragma=React.DOM&harmony',
}
]
},
resolve: {
extensions: ['', '.js', '.jsx']
}
gibi benim Tepki uygulama için JSX-yükleyici kullanmak o kurulum var Bu beni biten dosyaları istemesine olanak tanır uzantısı .jsx. Örneğin, /app/index.jsx
I
var Checkout = require('./components/Checkout')
Ve içeride /app/components/checkout.jsx
yaparak /app/components/checkout.jsx
gerektiren ben index.jsx gelen Checkout
gerektiren zaman düğmeye böylece
var Button = require('./components/Button')
gerektirir, bunun gerektiren işler Herhangi bir sorun olmadan düğme.
Ancak, uygulama/test/test.js gelen, ben
var Checkout = require('../components/Checkout')
yapmak ve webpack Ödeme bileşenini bulamıyor. Webpack dev sunucusundaki testleri görüntülediğimde, .jsx dosya uzantısının arandığını göstermez. Ben Test dizinden bu
var Checkout = require(jsx-loader!'../components/Checkout')
gibi jsx-loader
inline kullanmaya çalıştı nedenle
app/components/Checkout
app/components/Checkout.webpack.js
app/components/Checkout.web.js
app/components/Checkout.js
app/components/Checkout.json
aradı ve webpack şimdi dosyayı bulabilirsiniz, ama buna çözemezse belirten bir hata atar Checkout
requires
. Başka bir deyişle,
app/test
klasöründen
require
'u kullandığımda, tüm bağımlılık zinciri eşitlenmez.
Bu dizin yapısındaki sınamalarda ya da daha genel olarak web paketini bir uygulama dosyasında bir uygulama dosyası gerektirecek şekilde nasıl yapılandırabilmem için webpack.config.js adresimi nasıl değiştirebilirim?
Güncelleme
Proje yapısı
/app
/test/test.js
/index.jsx
/components/checkout.jsx (and button.jsx)
/dist
/node_modules
package.json
webpack.config.js
bütün webpack yapılandırma
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')
]
}
testleri çalıştırmak için webpack yapılandırmasını nasıl kurdunuz, ana veya aynı mı? kurulumumda, dev yapılandırmaları çalıştırmak ve testlere tepki vermek için 2 farklı yapılandırma kullanıyorum. Benzer sorunla ilgili düzeltme, testler için web paketinde {extensions: ['', '.js', '.jsx']} çözümü eklemekti. –
@EugeneSafronov Şu anda projenin en üst düzeyinde bir webpack yapılandırması var. Bunun bir kopyasını OP'nin güncelleme bölümünde ve proje yapısı hakkında daha fazla ayrıntıda buldum. Testler için ikinci bir yapılandırma kullanmayı düşündüm, ancak nereye yerleştirileceğini veya nasıl yapılandırılacağını bilmiyordum. Bunun hakkında biraz bilgi verebilir misiniz? – Leahcim
yükleyicilerinizde 'include: __dirname' eksik değil misiniz? Ayrıca şunu deneyin: '/ \. jsx? $ /' – knowbody