我创建了 quite a few npm packages ,但我仍然不知道这个问题的正确答案:“JavaScript npm 包应该缩小吗?”
我一直都明白缩小缩小代码是个坏主意,所以我没有在我的 npm 包中这样做。但是,我看到一些 npm 包 axios , styled-components提供他们的“dist”文件的缩小版本和未缩小版本,同时 Lodash才不是。
哪些是对的?谁会使用缩小版?
最佳答案
这完全取决于您的包消费者的环境
对于 NodeJS 用户,您的包不必缩小,因为 Node 运行时通常直接文件访问 node_modules文件夹。不需要网络传输,也不需要在运行代码之前执行额外的代码转换。
对于在其构建管道中使用 bundler 的开发环境的消费,您的包最好不要缩小。在大多数情况下,包消费者确实将自己的缩小过程作为其构建的一部分。此外,例如,当以模块格式提供包时:
上述陈述基于这样的假设,即如果包含多个源文件,压缩之前会进行打包过程。缩小单独的模块并不常见。如果您提供单独的模块,例如对于浏览器中的 RequireJS 运行时,缩小仍然很重要,因为这些文件大部分是通过网络获取的。
如果您决定不提供缩小的代码,仍然建议运行您自己的测试以查看是否有标准的缩小过程 - 例如使用 UglifyJS - 不会破坏软件。
尽管对许多消费者来说没有必要缩小您的代码,但仍然建议您在常规分发之外提供一个缩小的包,以防有人可以从中受益。
For plugins / extensions for frameworks like Angular, Vue, Ember etc. it's usually unnecessary to minify your code, since they all implement their own build pipeline, often through a cli.
这些是缩小的主要目标。如果您在 CDN 上托管文件,或以其他方式通过 Web 直接提供文件 <script>标签使用,所见即所得。在这两种情况下,文件都必须通过网络传输。缩小可节省字节数。
这两者之间有一个非常重要的区别。尽管压缩并不总是必要的,但您通常有责任转译任何不太可能与您的包受众的目标环境 100% 兼容的代码。这包括:
ES20XX语法 - 可能 - ES5ES20XX API 实现如果您的包包含一个单个包,而不是一堆单独的模块,则缩小始终是一个安全的选择。由于 bundler 永远不会尝试对单个模块/实体进行任何有趣的操作(例如摇树优化),因此从技术上讲,您的代码很可能不会因任何构建过程而发生任何变化。
如果您打算分发软件的压缩包,最好也发送一个非压缩版本以用于调试目的。
关于javascript - JavaScript npm 包应该被缩小吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48673408/
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
使用rspec-rails3.0+,测试设置分为spec_helper和rails_helper我注意到生成的spec_helper不需要'rspec/rails'。这会导致zeus崩溃:spec_helper.rb:5:in`':undefinedmethod`configure'forRSpec:Module(NoMethodError)对thisissue最常见的回应是需要'rspec/rails'。但这是否会破坏仅使用spec_helper拆分rails规范和PORO规范的全部目的?或者这无关紧要,因为Zeus无论如何都会预加载Rails?我应该在我的spec_helper中做
我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
我有1.8.6附带的VanillaMacOSXLeopard。我是RoR的新手,所以会学习网上的教程。在使用更高版本的Ruby时,我是否可能会发现遵循它们的问题?我目前正在查看提到1.8.6和1.8.7的这个-http://www.railstutorial.org/book 最佳答案 RoR教程对两者都适用,但如果您正在学习Ruby,则应该学习1.9。Rails3将不支持1.8.6,所以我会选择1.8.7或1.9。我还推荐使用RVM在Ruby版本之间切换。 关于ruby-on-rail
假设我的Rails项目中有一个设置实例变量的Ruby类。classSomethingdefself.objects@objects||=begin#somelogicthatbuildsanarray,whichisultimatelystoredin@objectsendendend是否可以多次设置@objects?是否有可能在一个请求期间,在上面的begin/end之间执行代码时,可以在第二个请求期间调用此方法?我想这实际上归结为Rails服务器实例如何fork的问题。我应该改用Mutex还是线程同步?例如:classSomethingdefself.objectsreturn@o
我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan
构建一个深度优先的网络蜘蛛,这意味着它将访问第一页上的所有链接,然后转到每个链接,并访问所有第二页上的链接...你应该使用递归吗?我发现这是CPU密集型的。defrecursion()linkz_on_first_page.eachdo|link|recursion(link)endendrecursion(firstpage) 最佳答案 绝对不是,由于万维网的实际性质,您很快就会遇到问题。当您访问带有主导航部分的网站时,每个页面都链接到其他页面,您就进入了一个无限循环。您可以跟踪您处理了哪些链接,但即便如此,递归循环并不真正适合万
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我是rubyonrails菜鸟。相比之下,我的HTMLCSSjavascript和jQuery相当不错。最近我使用MichaelHartl的教程进入了RubyonRails:http://ruby.railstutorial.org/ruby-on-rails-tutorial-book.但是,唉,我正在尝试构建自己的项目并使用gemdevise作为进