node.js - zeit/pkg 如何捆绑我的节点应用程序?
问题描述
这是我关于 SO 的第一个问题,所以首先是一个 BIG HELLO,如果我的问题不符合所有标准或看起来很尴尬,请原谅。
我想知道我的应用程序是如何与 zeit 的 pkg 捆绑和编译的。
捆绑包是否插入到预先确定大小的二进制文件中?
它是否下载像 nexe 这样的节点源,并且代码是作为 main 运行的,还是在执行二进制文件时加载的快照?
我有一个后端 node-express 服务器和一个前端 Angular 应用程序,每个应用程序都有自己的 node_modules 文件夹,如下所示:
myapp
|-------/client
| |
| |-----/e2e
| |-----/node_modules
| |-----/src
|
|-------/config
|
|-------/node_modules
|
|-------/routes
|
|--app.js
|
|--package.json
|
|--README.md
pkg 如何处理这两个 node_modules 实例?
非常感谢您的帮助/专业知识!
解决方案
有几个这一事实node_modules
并不重要。在 app.js 中,require('foo')
指myapp/node_modules/foo
. 模块以类似的方式捆绑在一起,它们在加载时被解析。
pkg
只打包明确指定的模块。正如文件所述,
在打包过程中,pkg 会解析您的源代码,检测对 require 的调用,遍历项目的依赖项并将它们包含到可执行文件中。在大多数情况下,您不需要手动指定任何内容。但是,您的代码可能有 require(variable) 调用(所谓的要求的非文字参数)或使用非 JavaScript 文件(例如视图、css、图像等)。
require('./build/' + cmd + '.js') path.join(__dirname, 'views/' + viewName)
pkg 不处理此类情况。
pkg
因此,您必须在package.json 文件的属性中手动指定文件 - 脚本和资产。"pkg": { "scripts": "build/**/*.js", "assets": "views/**/*" }
请务必调用
pkg package.json
或pkg .
使用脚本和资产条目。
不这样做会导致打包时出现警告:
动态 require 可能在运行时失败,因为请求的文件在编译时是未知的并且未包含在可执行文件中。使用字符串文字作为 'require' 的参数,或保持原样并在 'scripts' 选项中指定解析的文件名。
推荐阅读
- python - Python二进制搜索算法返回无
- python - 无法实现用于解决密码工作的爬山算法
- sql - 如何使用同一列中的两个字符来限制我在 SQL 中的 SELECT
- ruby-on-rails - 是否可以指定 ActiveStorage 应该使用哪个主键?
- c - 为什么我的代码给出分段错误(核心转储)错误?
- javascript - 在 p5.js 中正确地制作计算器功能
- linux-kernel - DMA DRQ 是 DMA 虚拟通道吗
- pandas - 如何将时间序列和年份组合在一起?
- swift - 如何在 swiftUI 中运行终端命令?
- android - 将protobuf与android studio一起使用时编译时错误