Npm允许在项目中使用同一软件包的多个版本。这是一个强大的功能。
但是,在大多数前端项目中,我认为不希望依赖于不同版本的同一库。
对不同版本的同一库有依赖性意味着最终用户将必须多次加载给定的库(作为单独的请求或作为更大捆绑包的一部分)。
但是,如果使用npm来管理前端项目的依赖项,则可以很快获得对不同版本中相同库的依赖项。
我认为在大多数情况下这是不希望的,而且大多数时候我们甚至都不了解这种情况。
一个简单的情况,我们最终遇到这种情况:
在某个时间点安装react-router和history在项目中:
npm i -S react-router@1.0.0-rc1
npm i -S history@1.17.0
Run Code Online (Sandbox Code Playgroud)
当时react-router有一个依赖history@1.17.0。因此,您的整个项目仅依赖于此版本的history。
稍后,您决定升级到以下最新版本react-router:
npm i -S react-router@2
Run Code Online (Sandbox Code Playgroud)
现在react-router依赖history@2。
因此,您的项目现在已经依赖于history@1.17.0和传递依赖于history@2。
的两个版本history都包含在您的中npm_modules。
如果您使用的是Webpack或Browerify之类的模块捆绑程序,则最终会得到包含两个版本的的捆绑包history。
很可能您没有注意到。但是,如果您会注意到,则可能会将直接依赖项升级为`history @ 2。
我们如何处理这个问题?
我们如何找出前端项目是否依赖于不同版本的同一库?
我们如何避免最终获得比应有的束更大的束?
我知道从技术上讲npm / Webpack / Browserify在捆绑包中包含对不同版本的同一库的依赖关系是正确的。但是我正在寻找一种方法,以使其易于观察到这种情况的发生,以便开发人员可以采取步骤来优化依赖关系。
我还在此仓库中重新创建了示例:https : //github.com/jbandi/npm-package-problems
我是ORM解决方案的倡导者,我不时会举办关于Hibernate的研讨会.
在谈论框架生成的SQL时,人们通常会开始谈论他们如何能够使用"提示",而这对于ORM框架来说是不可能的.
通常类似于:"我们尝试过Hibernate.它在开始时看起来很有前途,但是当我们在非常复杂的生产数据库中放松它时,它就会崩溃,因为我们无法应用提示!".
但当被问到一个具体的例子时,那些人的记忆突然变得不那么清楚......
我通常感到害怕,因为整个"提示" - 主题对我来说听起来像伏都教......所以有人可以启发我吗?SQL-hints或DB-Hints是什么意思?
我唯一知道的,就是以某种方式"暗示"是SELECT ... FOR UPDATE.但这得到了Hibernate-API的支持......
我感到困惑gulp.src()。
根据这个线程,我认为有必要返回 gulp.src()。
gulp项目上的示例始终会返回gulp.src()。即gulp介绍样本。
但是,许多插件确实显示不返回的文档gulp.src()。即:无gulp或gulp-angular-templatecache
我应该如何确定我的任务是否应该返回gulp.src()?
使用VisualVM,我观察JBoss服务器上的以下堆使用情况:

使用以下(相关)JVM选项启动服务器:
-Xrs -Xms3072m -Xmx3072m -XX:MaxPermSize=512m -XX:+UseParallelOldGC -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000
Run Code Online (Sandbox Code Playgroud)
我们目前还启用了GC日志记录:
-XX:+PrintGC -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:log\gc.log
Run Code Online (Sandbox Code Playgroud)
基本上我对观察到的模式很满意,因为看起来我们没有任何内存泄漏(模式在几天内重复).
不过我想知道是否有优化空间?
首先,我不明白为什么当堆使用量达到2GB左右时垃圾收集已经开始了?它看起来像是因为它可以提供3GB,因为它可以在以后启动?
更多我会对有关观察到的堆使用模式和使用的JVM选项的提示感兴趣:
观察到的模式是否允许我得出有关使用的GC策略(UseParallelOldGC)的结论?我认为这个策略是正确的,或者考虑到观察到的堆使用情况,我应该尝试使用另一个策略吗?
我可以优化GC过程,以便使用完整的堆大小(3GB)吗?
现在它似乎从未使用过3GB的全部,我应该将Xms/Xmx降低到2.5GB吗?
我缺少任何明显的GC优化吗?像调整-XX:NewSize或-XX:NewRatio?
想到的任何其他提示?
谢谢!
使用Gulp,很容易编排一个由通过管道处理的许多小步骤组成的构建.
我目前的Gulp设置中的任务之一如下所示:
gulp.task("release-assets", ["angular-templates", "less-compile"], function() {
var assets = useref.assets();
var jsFilter = filter("**/*.js");
var moonwalkFilter = filter("**/" + MOONWALK_JS);
var cssFilter = filter("**/*.css");
return gulp.src("./Content/**/*.cshtml")
.pipe(assets) // Concatenate with gulp-useref
.pipe(jsFilter)
.pipe(ngAnnotate()) // Process javascript sources to add dependency injection annotations
.pipe(uglify()) // Minify javascript sources
.pipe(jsFilter.restore())
.pipe(cssFilter)
.pipe(less()) // Generate CSS from LESS
.pipe(cmq({ log: true })) // Combine matching media queries into one media query definition
.pipe(minifyCSS()) // Minify CSS sources
.pipe(cssFilter.restore())
.pipe(moonwalkFilter) // Filter the …Run Code Online (Sandbox Code Playgroud) gulp ×2
browserify ×1
hibernate ×1
java ×1
javascript ×1
jboss ×1
jvm ×1
less ×1
npm ×1
orm ×1
performance ×1
sql ×1
webpack ×1