使用nodeJS和Gulp任务运行器自动缩小

我需要一些build议来改善节点和吞吐量的自动缩小。

主要目标是在开发模式下dynamic生成缩小文件(对于JS和LESS),并在生产模式下自动将正常文件(js和less)更改为缩小文件。

该场景包含:

  • NodeJS和ExpressJS进行路由和环境configuration
  • 玉作为模板引擎
  • 吞(任务亚军)

这是我的设置:

GULP

我正在使用nodemon来启动我的节点服务器的server.js。 在这个gulp文件中,我有一些任务(['watch'])来观察JS和LESS文件的变化,并在每一个变化中缩小它们。

gulp.task('nodemon', function () { nodemon({ script: 'server.js'}) .on('start', ['watch']) .on('change', ['watch']) }) 

节点

在节点服务器中,我呈现视图注入和对象,它检测开发或生产模式

  var env= process.env.NODE_ENV = process.env.NODE_ENV || 'development'; app.get('/', function(req, res){ res.render('index', {environment: env}); }); 

在视图中,将注入的对象进行比较,以便为开发模式添加正常的CSS和JS文件或为生产模式添加缩小的文件

  if environment == "development" link(rel='stylesheet', href='/vendor/bootstrap/dist/css/bootstrap.css') else link(rel='stylesheet', href='/vendor/bootstrap/dist/css/bootstrap.min.css') 

这是正确的方法来做到这一点? 我是否需要检查另一个选项? 每次提交应用到服务器之前,我都想避免手动缩小。 所有的build议将被接受,以改善这一点。

在服务器开发的时候更好地缩小吞吐量吗? 我如何用Azure做到这一点?

谢谢。

我发现一个新的解决scheme来做这个自动缩小。

通过上面我的问题的代码,您可以在开发模式下生成所有缩小的文件,以手动上传到服务器。 可以,但是,如果你做了一些改变的CSS / JS没有激起了一口气任务缩小,变化不会被缩小。

如果您正在使用Azure,我发现了一个新的解决scheme。 我的新解决scheme使用KUDU( https://github.com/projectkudu/kudu

Kudu是Azure网站中git部署的引擎,也可以在Azure之外运行。 当您部署到Azure时,会有一个默认的部署命令来安装node和package.json。

使用Kudu,你可以创build一个自定义的部署命令,以便启动你想要的所有东西(为缩小,咕噜,testing等等)。 在这种情况下,我们将发起一个缩小任务。

首先,我们要安装本地azure-cli来为Azure创build自定义部署脚本:

 npm install -g azure-cli 

然后我们创build自定义命令

 azure site deploymentscript --node 

这会将以下文件添加到您的目录中:

  • .deployment
  • deploy.cmd

.deployment启动deploy.cmd(azure色需要)

如果您检查deploy.cmd,则会看到安装所需的所有软件包。 因此,为了在服务器中启动grunt,我们需要在安装部分添加这个:

 IF NOT DEFINED GULP_CMD ( :: Install gulp echo Installing Gulp call npm --registry "http://registry.npmjs.org/" install gulp -g --silent IF !ERRORLEVEL! NEQ 0 goto error :: Locally just running "gulp" would also work SET GULP_CMD="%appdata%\npm\gulp.cmd" ) 

并像这样更改部署部分:

 :Deployment echo Handling node.js deployment. :: 1. Select node version call :SelectNodeVersion :: 2. Install npm packages IF EXIST "%DEPLOYMENT_TARGET%\package.json" ( pushd "%DEPLOYMENT_TARGET%" call :ExecuteCmd !NPM_CMD! install IF !ERRORLEVEL! NEQ 0 goto error popd ) :: 3. Install npm packages echo "Execute Gulp" IF EXIST "%DEPLOYMENT_TARGET%\gulpfile.js" ( pushd "%DEPLOYMENT_TARGET%" call :ExecuteCmd !GULP_CMD! YOUR_GULP_TASK_TO_EXECUTE IF !ERRORLEVEL! NEQ 0 goto error ) popd :: 4. KuduSync IF /I "%IN_PLACE_DEPLOYMENT%" NEQ "1" ( call :ExecuteCmd "%KUDU_SYNC_CMD%" -v 50 -f "%DEPLOYMENT_SOURCE%" -t "%DEPLOYMENT_TARGET%" -n "%NEXT_MANIFEST_PATH%" -p "%PREVIOUS_MANIFEST_PATH%" -i ".git;.hg;.deployment;deploy.cmd" IF !ERRORLEVEL! NEQ 0 goto error ) 

使用Azure的这个自定义部署脚本,每次进行部署(将分支推向azure色),gulp将启动任务YOUR_GULP_TASK_TO_EXECUTE(在我的“样式”中将启动缩小为.less文件)

如果在部署脚本中出现错误,我们站点的azure色执行将失败(查看registry)。 我build议启动本地deploy.cmd,看看如何在azure中工作,如果它会崩溃。

您可以在每个实现中自定义此脚本以进行启动。

我希望它有帮助!

我通常正是你想避免.. 🙂

在开发过程中,我有一些观察者正在testingjs文件,将触笔转换为css,并从jade生成我的静态html部分。 他们的最后一步是使用美妙的gulp-inject插件来调用我的索引文件中的未定义资源。 所有这些文件都放在生成文件夹中。

当我想testing我的生产环境时,我有一个dist任务,它将build文件夹中的所有资源连接起来,并将它们缩小,将rev后缀应用于caching清除的名称,并使用gulp-inject来更新索引。 html文件与缩小的资产链接。

在服务器中,我检查环境并指示express(使用serve-static包)来相应地为build或dist文件夹提供服务。

在Azure中创build您的网站时,您可以指定您的process.env.NODE_ENV值,以便在运行时无需修改代码即可。