使用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值,以便在运行时无需修改代码即可。