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"
}
}