<span>"scripts": { </span> <span>"preinstall": "node prepare.js", </span> <span>"postintall": "node clean.js", </span> <span>"build": "webpack", </span> <span>"postbuild": "node index.js", </span> <span>"postversion": "npm publish" </span><span>} </span>
>通常是为前端开发时,您想运行两个或多个手表过程以重新构建代码。例如,一个用于WebPack,另一个用于Nodemon。您可以使用&&执行此操作,因为第一个命令不会发布提示。但是,有一个名为同时的方便的模块,可以同时产生多个过程并同时运行它们。
另外,安装Dev命令行工具,例如WebPack,Nodemon,Gulp,Mocha等。您可以指向./node_modules/.bin/mocha,或将此行添加到您的bash/zsh配置文件(路径!):> >使用env vars
即使在项目的早期阶段,也要利用环境变量,以确保敏感信息没有泄漏,并从一开始就正确构建代码。此外,某些库和框架(我知道Express肯定会做到这一点)将吸引诸如Node_env之类的信息以修改其行为。将其设置为生产。还设置您的mongo_uri和api_key值。您可以创建一个shell文件(例如start.sh),然后将其添加到.gitignore:<span>export <span>PATH</span>="./node_modules/.bin:<span>$PATH"</span> </span>
强大而聪明的事件循环是使节点一直使用的所有时间使节点变得如此快,出色的原因,而这本来可以浪费的,等待输入和输出任务完成。因此,节点非常擅长优化I/O结合系统。
<span>NODE_ENV=production MONGO_URL=mongo://localhost:27017/accounts API_KEY=lolz nodemon index.js </span>>
>如果您需要执行CPU密集型(例如,计算,密码的哈希或压缩),则除了为这些CPU任务传递新的过程外,您可能还需要探索任务的推迟,并使用SETIMMIDIATIE进行递延。 ()或settimeout() - 他们的回调中的代码将继续在下一个事件循环周期中继续。 NextTick()在相同的周期上工作,与名称相反。 argh!
<span>{ </span> <span>"env": { </span> <span>"NODE_ENV": "production", </span> <span>"MONGO_URL": "mongo://localhost:27017/accounts" </span> <span>} </span><span>} </span>>这是伯特·贝尔德(Bert Belder)的图表,他在活动循环中工作。他清楚地知道事件循环是如何工作的!
使用功能继承
> JavaScript支持原型继承,即对象从其他对象继承时。班级运营商还使用ES6添加了该语言。但是,与功能性继承相比,它非常复杂。大多数节点专家都喜欢后者的简单性。它是由简单功能工厂模式实现的,并且不需要使用新的或新的原型。当您更新原型时,没有隐含的效果(导致所有实例也更改),因为在功能继承中,每个对象都使用其自己的方法副本。
考虑TJ Holowaychuk的代码,TJ Holowaychuk是Express,Mocha,Connect,Superegent和数十个其他节点模块背后的多产天才。 Express使用功能性继承(完整源代码):<span>"scripts": { </span> <span>"preinstall": "node prepare.js", </span> <span>"postintall": "node clean.js", </span> <span>"build": "webpack", </span> <span>"postbuild": "node index.js", </span> <span>"postversion": "npm publish" </span><span>} </span>
是客观的,核心节点模块经常使用原型继承。如果您遵循该模式,请确保您知道它的工作原理。您可以在此处阅读有关JavaScript继承模式的更多信息。
>>
<span>export <span>PATH</span>="./node_modules/.bin:<span>$PATH"</span> </span>>我不知道Dexter仅查看app.use()时在做什么。如何有意义的名称:
<span>NODE_ENV=production MONGO_URL=mongo://localhost:27017/accounts API_KEY=lolz nodemon index.js </span>>以相同的方式,文件名必须正确反映内部代码的目的。如果您查看Node(github链接)的LIB文件夹,该文件夹与平台捆绑在一起的所有核心模块,那么您将看到文件/模块的清晰命名(即使您对所有内容都不熟悉
> all 核心模块):
<span>{ </span> <span>"env": { </span> <span>"NODE_ENV": "production", </span> <span>"MONGO_URL": "mongo://localhost:27017/accounts" </span> <span>} </span><span>} </span>内部模块用下划线标记(_debugger.js,_http_agent.js,_http_client.js),就像代码中的方法和变量一样。这有助于警告开发人员这是一个内部界面,如果您使用的是它,则您是您自己的 - 如果它被重构甚至删除,请不要抱怨。
考虑不使用JavaScript
当您只需要几个宏时(宏允许您
构建完全是您想要的语言),而不是整个新语言,然后考虑将做到这一点的sweet.js,可以做到这一点 - 允许您编写生成代码的代码。
如果您走了非javascript路线,请仍然包含您的编译代码,因为某些开发人员可能无法很好地理解您的语言无法正确构建它。例如,VS代码是最大的打字稿项目之一,也许是在Angular 2之后,并且代码使用TypeScript使用类型进行补丁节点的核心模块。在VS代码回购的VSCODE/SRC/VS/BASE/NODE/NODE/NODE/NODE/NODE(链接)中,您可以看到熟悉的模块名称,例如加密,流程等,但使用TS扩展名。存储库中还有其他TS文件。但是,它们还包括带有本机JavaScript代码的VSCODE/build。。那么,为什么不抓住我的快递备忘单。我在那里列出了主要的中间件模块。例如,NPM I压缩-s将通过放气响应来降低下载速度。 logger('tiny')或logger('common')分别提供较少的(dev)或更多(prod)日志。> 向上
由于其非阻滞I/O,因此>
然后,您可以启动同一服务器的四个实例:
<span>"scripts": { </span> <span>"preinstall": "node prepare.js", </span> <span>"postintall": "node clean.js", </span> <span>"build": "webpack", </span> <span>"postbuild": "node index.js", </span> <span>"postversion": "npm publish" </span><span>} </span>对于Docker,PM2版本2具有PM2-Docker。因此,您的Dockerfile看起来可以这样:
<span>export <span>PATH</span>="./node_modules/.bin:<span>$PATH"</span> </span>>官方Alpine Linux PM2图像在Docker Hub中。
<span>NODE_ENV=production MONGO_URL=mongo://localhost:27017/accounts API_KEY=lolz nodemon index.js </span>>这是一个最佳练习,可以使您从节点实例中获得更多的果汁(您使用PM2或类似的果汁,请参见上文)。要走的方法是让节点服务器执行应用程序工作,例如提出请求,处理数据并执行业务逻辑并将流量从静态文件中卸载到另一个Web服务器,例如Apache HTTPD或Nginx。同样,您可能应该使用Docker进行设置:
摘要
<span>{ </span> <span>"env": { </span> <span>"NODE_ENV": "production", </span> <span>"MONGO_URL": "mongo://localhost:27017/accounts" </span> <span>} </span><span>} </span>
>在当今的开源软件时代,没有任何借口不从公开的受信任和测试的代码中学习。您无需进入内心圈子就可以进入。学习永远不会停止,我敢肯定,我们很快就会根据我们将经历的失败和成功获得不同的最佳实践。保证它们是。
exports <span>= module.exports = createApplication; </span><span>// ... </span><span>function createApplication() { </span> <span>var app = function(req<span>, res, next</span>) { </span> app<span>.handle(req, res, next); </span> <span>}; </span> <span>mixin(app, EventEmitter.prototype, false); </span> <span>mixin(app, proto, false); </span> app<span>.request = { __proto__: req, app: app }; </span> app<span>.response = { __proto__: res, app: app }; </span> app<span>.init(); </span> <span>return app; </span><span>} </span>>最后,我想写有关软件如何饮食世界以及JavaScript如何吃软件的信息……有很多很棒的事情,例如年度标准版本,很多NPM模块,工具和会议……但是相反,我将完成有一个谨慎的态度。
学习新事物是好的,但不要因为实际构建东西而混淆。 重要的是,您的薪水实际上是在建立东西。停止工程。您不是在构建下一个Facebook。 Promises vs. Generator vs. Async等待着我对我来说是一个疑问,因为当有人回复讨论中的线程时,我已经写了我的回调(并使用CoffeeScript的速度比普通的ES5/6/7快2倍! )。
>最终的最佳实践是使用最佳实践,最好的方法是掌握基本面。阅读源代码,尝试代码新事物,最重要的是自己编写大量代码。现在,在这一点上,停止阅读并进行重要的船舶代码!
,以防万一这篇文章还不够,这里有更多关于最佳节点实践的阅读:https://blog.risingstack.com/nodejs-at-scale-npm-best-practices
>
>测试Node.js应用程序的一些最佳实践是什么? Node.js开发,并且有几种最佳实践值得关注。其中包括编写单元测试以测试应用程序的各个组件,集成测试以测试这些组件如何交互,以及端到端测试以整体测试您的应用程序。每当对您的代码库进行更改时,使用连续集成(CI)系统也很重要。 NODE.JS通常使用NPM,NPM,NPM,node.js的默认软件包管理器完成。重要的是要在软件包中指定依赖项的确切版本。您还应该定期更新依赖项,以从错误修复和安全补丁中受益。>
>我如何确保Node.js?>如何缩放我的node.js应用程序?可以通过多种方式实现Node.js应用程序。一种常见的方法是使用群集模块创建共享服务器端口的子进程,从而使您的应用程序同时处理更多请求。您还可以使用负载平衡来通过多个服务器分发传入的网络流量,以及根据您的需求,水平缩放(添加更多机器)或垂直缩放(向单个机器添加更多资源)。
以上是10个Node.js的最佳实践:节点大师的启蒙的详细内容。更多信息请关注PHP中文网其他相关文章!