草庐IT

javascript - 将 NPM 包拼接成一个 JS 文件

coder 2025-01-21 原文

我正在尝试获取 Swig (模板语言)致力于 Parse Cloud Code与 express 。 Parse Cloud Code 是一个不允许 NPM 的 Node/Express 主机。荒谬,我知道。不过,我仍然可以使用 requires 语句将外部文件加载到代码中,所以我认为我有希望让它工作。

所以我的问题是如何将整个 Swig 包放入一个 JS 文件中,我可以像这样从我的 Parse Express 应用程序中包含它:

var swig = require("./cloud/swig.js");

值得注意的是,Parse 打破了正常的 require 语句,因此如果不修改 node_modules 文件夹中的每个文件以在其路径中包含 cloud(这是为什么我上面的路径中有 cloud)。 Parse 在上传大量小文件时也会卡住。拼接是这个平台的需求。

我已经尝试使用 browserify 几个小时,但是当我使用 require 语句加载 browserified 文件时,我所做的任何组合都没有暴露 Swig 对象。我认为这可能是正确的选择,因为 Browserified 文件包含来自 Swig 的所有文件,但它不会在外部公开它们。

我的问题是这可以在 browserify 中完成吗?如果可以,怎么做?或者是否有另一种方法将 NPM 存储库连接到一个文件,以便更轻松地从该平台包含它?

非常感谢。

最佳答案

Browserify 不是完成这项工作的正确工具。

顾名思义,browserify 旨在用于生成要在浏览器中执行的文件。它从一个入口点(即你传递给 browserify 的一些 JS 文件)遍历 require 调用,并将它们捆绑在一个对象中,该对象将它们的名称映射到包装模块的函数。它不期望 require 函数已经存在并且不使用它。它替换了它自己的 require 实现,它只做一件事:从包中查找名称,执行匹配函数并返回它的 exports

理论上你可以require一个browserify bundle,但它只会返回一个空对象(尽管它可能会与全局变量混淆)。而且很有可能它会崩溃,因为捆绑的模块认为它们正在浏览器中执行。这不会有任何好处。

如果您想坚持使用主机,唯一明智的选择是从本地项目文件夹复制 node_modules 文件夹。如果您的计算机和服务器不是 100% 兼容(例如 32 位与 64 位、Debian 与 RedHat、OSX/Windows 与 Linux),这可能不起作用,但这主要取决于您的确切依赖项(基本上是使用node-gyp 可能是个问题)。

Node.js 在自动查找 require 调用中的依赖项时使用 node_modules 文件夹。如果你能以某种方式在服务器上获得一个包含正确内容的 node_modules 文件夹,只要 node_modules 包含,require("foo") 就会工作一个模块foo

关于javascript - 将 NPM 包拼接成一个 JS 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22851715/

有关javascript - 将 NPM 包拼接成一个 JS 文件的更多相关文章

  1. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  2. ruby - 其他文件中的 Rake 任务 - 2

    我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时

  3. ruby-on-rails - 在 Rails 中将文件大小字符串转换为等效千字节 - 2

    我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,

  4. ruby-on-rails - Rails 3 中的多个路由文件 - 2

    Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题

  5. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  6. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  7. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  8. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  9. ruby-on-rails - 渲染另一个 Controller 的 View - 2

    我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>

  10. Ruby 写入和读取对象到文件 - 2

    好的,所以我的目标是轻松地将一些数据保存到磁盘以备后用。您如何简单地写入然后读取一个对象?所以如果我有一个简单的类classCattr_accessor:a,:bdefinitialize(a,b)@a,@b=a,bendend所以如果我从中非常快地制作一个objobj=C.new("foo","bar")#justgaveitsomerandomvalues然后我可以把它变成一个kindaidstring=obj.to_s#whichreturns""我终于可以将此字符串打印到文件或其他内容中。我的问题是,我该如何再次将这个id变回一个对象?我知道我可以自己挑选信息并制作一个接受该信

随机推荐