Javascript 我运行';npm启动';命令,但启动整个Web项目需要几个小时

Javascript 我运行';npm启动';命令,但启动整个Web项目需要几个小时,javascript,node.js,reactjs,redux,Javascript,Node.js,Reactjs,Redux,目前,我们的团队正在使用NodeJS并结合React-Redux开发一个web项目。在开发之初,项目开始得很快,但随着项目的增加,它变得越来越慢。到目前为止,每次运行“npmstart”命令时,启动整个项目几乎需要1小时。此外,每次更改javascript代码时,重新编译项目大约需要2分钟。这是我们公司首次使用“React”和Redux。我们不知道发生了什么,也不知道该怎么办。我们将几乎所有的业务参数作为Redux的全局变量。我试图在webpack.config.js中更改devtool的配置,

目前,我们的团队正在使用
NodeJS
并结合
React-Redux
开发一个web项目。在开发之初,项目开始得很快,但随着项目的增加,它变得越来越慢。到目前为止,每次运行“
npmstart
”命令时,启动整个项目几乎需要1小时。此外,每次更改javascript代码时,重新编译项目大约需要2分钟。这是我们公司首次使用“React”和
Redux
。我们不知道发生了什么,也不知道该怎么办。我们将
几乎所有的业务参数
作为
Redux
全局变量
。我试图在
webpack.config.js
中更改
devtool
的配置,希望能更快地启动,结果只会导致
内存出堆。这会影响我们项目的运营效率吗?它对系统有害吗?正如我所描述的,这个问题的常见原因是什么?我怎样才能修好它?
以下是我们的配置文件(webpack.config.js和package.json)

//webpack.config.js
var webpack=需要(“webpack”);
var路径=要求(“路径”);
var glob=需要(“glob”);
var HtmlWebpackPlugin=require('html-webpack-plugin');
var ExtractTextPlugin=require('extract-text-webpack-plugin');
var entries=getEntry('src/Html/***.js','src/Html/');
条目['index']='./src/app.js';
变量配置={
devtool:'源映射',
条目:条目,
输出:{
路径:“dist”,
文件名:“js/[name].js”,
chunkFilename:“js/[name].js”
},
模块:{
装载机:[
{
测试:require.resolve('jquery'),
加载器:“expose?jQuery!expose?$”
},
{
测试:/\.js[x]?$/,
排除:/node_模块/,
加载器:“巴别塔加载器?预设[]=es2015和预设[]=react”
},{
测试:/\.css$/,,
加载器:“样式加载器!css加载器”
},{
测试:/\.小于/,
加载器:“样式加载器!css加载器!更少加载器”
}, {
测试:/\(png | jpg | gif)$/,
loader:'url loader?limit=8192&name=img/[hash].[ext]'
}
]
},
插件:[
新建webpack.optimize.UglifyJsPlugin({
压缩:{
警告:错误
}
}),
新建webpack.optimize.UglifyJsPlugin({
sourceMap:false,
马槽:错
}),
新的webpack.DefinePlugin({
'process.env':{NODE_env:JSON.stringify(“production”)}
}),
新的webpack.ProvidePlugin({
$:“jquery”,
jQuery:“jQuery”,
“window.jQuery”:“jQuery”
})
],
决心:{
别名:{
jquery:“jquery/src/jquery”
}
},
巴别塔:{
插件:[“导入”,“库名”:“antd”,“样式”:“css”}]]
},
外部:{
jquery:'窗口。$',
artTemplate:'window.template'
},
开发服务器:{
contentBase:“./”,//
颜色:正确,//
历史上的倒退:是的//
内联:true,//
港口:8205
},
};
var pages=getEntry('src/Html/***.Html','src/Html/');
var pagenames=对象.键(页);
config.plugins.push(新的HtmlWebpackPlugin({
文件名:'./index.html',
模板:'./src/index.html',
是的,
块:['index'],
哈什:没错,
缩小:{
removeComments:对,
collapseWhitespace:false
}
}));
pagenames.forEach(函数(pagename){
变量配置={
文件名:'./pages/'+pagename+'.html',
模板:页面[pagename],
注射:“身体”,
缩小:{
removeComments:对,
collapseWhitespace:false
}
};
if(config.entry中的pagename){
conf.inject=true;
conf.chunks=[pagename];
conf.hash=true;
}
push(新的HtmlWebpackPlugin(conf));
});
函数getEntry(globPath,pathDir){
var files=glob.sync(globPath);
变量项={},
条目、目录名、基名、路径名、extname;
对于(var i=0;i//webpack.config.js
var webpack = require("webpack");
var path = require("path");
var glob = require('glob');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var ExtractTextPlugin = require('extract-text-webpack-plugin');
var entries = getEntry('src/Html/**/*.js', 'src/Html/');
entries['index'] = './src/app.js';
var config = {
devtool: 'source-map',
    entry: entries,
    output: {
        path: "dist",
        filename: "js/[name].js",
        chunkFilename: "js/[name].js"
    },
module: {
    loaders:[
        {
            test: require.resolve('jquery'),
            loader: 'expose?jQuery!expose?$'
         },
        {
            test: /\.js[x]?$/,
            exclude: /node_modules/,
            loader: 'babel-loader?presets[]=es2015&presets[]=react'
      },{
          test: /\.css$/, 
          loader: 'style-loader!css-loader' 
      },{
          test: /\.less/,
          loader: 'style-loader!css-loader!less-loader'
      }, {
          test: /\.(png|jpg|gif)$/,
          loader: 'url-loader?limit=8192&name=img/[hash].[ext]'
      }
    ]
  },
  plugins:[
            new webpack.optimize.UglifyJsPlugin({
            compress: {
              warnings: false
             }
            }),
            new webpack.optimize.UglifyJsPlugin({
            sourceMap: false,
            mangle: false
            }),
            new webpack.DefinePlugin({
                'process.env': {NODE_ENV:  JSON.stringify("production")}
            }),
           new webpack.ProvidePlugin({
             $:"jquery",
             jQuery:"jquery",
             "window.jQuery":"jquery"
           })
         ],
         resolve: {
             alias: {
                 jquery: "jquery/src/jquery"
             }
         },
  babel:{
       plugins:[["import", [{ "libraryName": "antd", "style": "css" }]]]
  },
  externals: {
        jquery: 'window.$',
        artTemplate: 'window.template'
  },
  devServer: {
        contentBase: "./",                   // 
        colors: true,                            // 
        historyApiFallback: true,                //
        inline: true,                          // 
        port: 8205
  },

};

var pages = getEntry('src/Html/**/*.html', 'src/Html/');
var pagenames = Object.keys(pages);

config.plugins.push(new HtmlWebpackPlugin({
    filename: './index.html',
    template: './src/index.html',
    inject: true,
    chunks: ['index'],
    hash: true,
    minify: {
        removeComments: true,
        collapseWhitespace: false
    }
}));

pagenames.forEach(function (pagename) {
    var conf = {
        filename: './pages/' + pagename + '.html',
        template: pages[pagename],
        inject: 'body',
        minify: {
            removeComments: true,
            collapseWhitespace: false
        }
    };
    if (pagename in config.entry) {
        conf.inject = true;
        conf.chunks = [pagename];
        conf.hash = true;
    }
    config.plugins.push(new HtmlWebpackPlugin(conf));
});
function getEntry(globPath, pathDir) {
    var files = glob.sync(globPath);
    var entries = {},
        entry, dirname, basename, pathname, extname;

    for (var i = 0; i < files.length; i++) {
        entry = files[i];
        dirname = path.dirname(entry);
        extname = path.extname(entry);
        basename = path.basename(entry, extname);
        pathname = path.join(dirname, basename);
        pathname = pathDir ? pathname.replace(new RegExp('^' + pathDir), '')     : pathname;
        entries[basename] = './' + entry;
    }
    return entries;
}

module.exports = config;
//=================================================================

//-------- package.json
{
  "private": true,
  "entry": {
    "index": "./src/index.js"
  },
  "dependencies": {
    "antd": "^2.1.0",
    "react": "^15.1.0",
    "react-dom": "^15.1.0",
    "react-router": "^3.0.0",
    "react-redux": "^4.4.5",
    "redux": "^3.6.0",
  "redux-thunk":"2.1.0"
  },
  "devDependencies": {
    "atool-build": "^0.9.0",
    "atool-test-mocha": "^0.1.4",
    "babel-eslint": "^7.0.0",
    "babel-plugin-import": "^1.0.1",
    "babel-plugin-transform-runtime": "^6.8.0",
    "babel-runtime": "^6.9.2",
    "babel-loader": "^6.2.5",
    "babel-plugin-transform-runtime": "^6.15.0",
    "babel-preset-es2015": "^6.14.0",
    "babel-preset-react": "^6.11.1",
    "babel-preset-stage-0": "^6.3.13",
    "babel-runtime": "^6.11.6",
    "better-npm-run": "0.0.11",
    "css-loader": "^0.25.0",
    "sass-loader": "^4.0.0",
    "style-loader": "^0.13.1",
    "url-loader": "^0.5.6",
    "cssnano": "^3.7.4",
    "debug": "^2.2.0",
    "extract-text-webpack-plugin": "^1.0.0",
    "file-loader": "^0.9.0",
    "eslint": "^3.8.1",
    "eslint-config-airbnb": "^12.0.0",
    "eslint-plugin-import": "^2.0.1",
    "eslint-plugin-jsx-a11y": "^2.2.3",
    "eslint-plugin-react": "^6.4.1",
    "expect": "^1.20.1",
    "jquery": "^3.1.1",
    "pre-commit": "1.x",
    "redbox-react": "^1.2.6",
    "webpack-dev-server": "^1.16.2",
    "webpack": "^1.12.14",
    "webpack-dev-middleware": "^1.6.1",
    "webpack-hot-middleware": "^2.12.2",
    "extract-text-webpack-plugin": "^1.0.1",
    "html-webpack-plugin": "^2.22.0",
    "glob": "^7.0.6"
  },
  "pre-commit": [
    "lint"
  ],
  "scripts": {
    "build": "webpack",
    "lint": "eslint --ext .js,.jsx src/",
    "start": "webpack-dev-server --inline",
    "test": "atool-test-mocha ./**/__tests__/*-test.js",
    "dev": "webpack-dev-server --devtool eval --progress --colors --hot --    content-base build"
  }
}