我正在使用Webpack,webpack-dev-server和Jest测试套件处理react项目。我的问题是:我如何运行由webpack-dev-server触发的监视脚本,并允许Jest监视我的测试是否失败?
示例:
我在package.json文件中想到了类似的东西:
"scripts": {
"build": "NODE_ENV=production webpack -p --config webpack.config.js",
"watch": "webpack-dev-server --progress --colors --hot --inline && npm run test",
"test": "jest"
}
显然,这不起作用。
下面是我的package.json文件和我的webpack.config.js文件。
的package.json
{
"scripts": {
"build": "NODE_ENV=production webpack -p --config webpack.config.js",
"watch": "webpack-dev-server --progress --colors --hot --inline",
"test": "jest"
},
"author": "Resultados Digitais",
"license": "ISC",
"jest": {
"transform": {
".*": "./node_modules/babel-jest"
},
"moduleNameMapper": {
"\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "./__mocks__/fileMock.js",
"\\.(css|less)$": "identity-obj-proxy"
},
"unmockedModulePathPatterns": [
"node_modules/react/",
"node_modules/enzyme/"
]
}
. . .
}
webpack.config.json
var path = require('path');
var CopyWebpackPlugin = require('copy-webpack-plugin');
module.exports = {
entry: ['babel-polyfill', './src/js/index.jsx'],
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
},
module: {
rules: [
{
enforce: "pre",
test: /\.jsx$/,
exclude: /node_modules/,
loader: "eslint-loader",
},
{
test: /\.jsx?$/,
exclude: [/node_modules/],
use: [{
loader: 'babel-loader',
options: { presets: ['es2015', 'react', 'stage-0'] }
}]
},
{
test: /\.css$/,
use: [
{ loader: 'style-loader' },
{ loader: 'css-loader'}
]
},
{
test: /\.less$/,
use: [
{ loader: 'style-loader' },
{ loader: 'css-loader'},
{ loader: 'less-loader' },
]
},
{
test: /\.(jpe?g|png|gif|svg)$/i,
use: {
loader: 'url?limit=10000!img?progressive=true'
}
},
{ test: /\.(woff|woff2)(\?v=\d+\.\d+\.\d+)?$/, loader: 'url?limit=10000&mimetype=application/font-woff' },
{ test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/, loader: 'url?limit=10000&mimetype=application/octet-stream' },
{ test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, loader: 'file' },
{ test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, loader: 'url?limit=10000&mimetype=image/svg+xml' }
]
},
resolveLoader: { moduleExtensions: ["-loader"] },
devtool: 'source-map',
resolve: {
extensions: ['*', '.js', '.jsx']
},
plugins: [
new CopyWebpackPlugin([
{ from: './src/html' },
{ from: './src/img/favicon.ico', to: './img'}
])
],
devServer: {
inline: true,
hot: true,
contentBase: path.join(__dirname, 'dist'),
port: 5000
}
}
感谢任何帮助。
答案 0 :(得分:4)
安装npm-run-all
作为dev依赖项,允许您一次运行多个脚本。
https://www.npmjs.com/package/npm-run-all
示例假设以下"start"
和"test"
脚本分别起作用:
{
"test": "jest --watch",
"start": "webpack-dev-server --progress --colors --hot --inline",
"dev": "npm-run-all test start"
}
您只需在终端上使用npm run dev
启动并准备就绪。
答案 1 :(得分:3)
将package.json
中的测试脚本从此"test": "jest"
更改为此"test": "jest --watch"
。
然后只使用2个终端:在一个终端中运行npm run watch
,在另一个终端中运行npm run test
。