zeit / pkg如何捆绑我的节点应用程序?

时间:2018-08-03 09:42:54

标签: node.js angular5 packaging zeit-pkg

这是我的第一个问题,因此,首先要提出一个大建议,请谅解,以防我的问题无法解决所有问题,或显得笨拙。

我想知道我的应用程序是如何用zeit的pkg捆绑和编译的。

捆绑软件是否已插入预先设置大小的二进制文件?

它是否下载了像nexe这样的节点源,并且在执行二进制文件时代码是作为主程序运行还是作为快照加载?

我有一个后端节点表达服务器和一个前端有角度的应用程序,每个都有自己的node_modules文件夹,如下所示:

myapp
 |-------/client
 |          |
 |          |-----/e2e
 |          |-----/node_modules
 |          |-----/src
 |           
 |-------/config 
 |
 |-------/node_modules
 |
 |-------/routes
 |
 |--app.js
 |
 |--package.json
 |
 |--README.md

pkg如何处理node_modules的这两个实例?

我们非常感谢您的帮助/专业!

1 个答案:

答案 0 :(得分:0)

存在多个node_modules的事实并不重要。在app.js中,require('foo')是指myapp/node_modules/foo。捆绑模块的方式与加载模块时的解析方式类似。

pkg仅打包显式指定的模块。如the documentation所述,

  

在包装过程中,pkg会解析您的源,检测对   需求,遍历项目的依赖项并将其包括在内   变成可执行文件。在大多数情况下,您无需指定任何内容   手动。但是,您的代码可能需要(可变)调用(因此   称为非文字参数要求)或使用非JavaScript文件   (例如,视图,css,图像等)。

  require('./build/' + cmd + '.js')
  path.join(__dirname, 'views/' + viewName)
     

pkg无法处理此类情况。因此,您必须指定文件-   脚本和资产-手动在package.json的pkg属性中   文件。

  "pkg": {
    "scripts": "build/**/*.js",
    "assets": "views/**/*"
  }
     

只需确保调用pkg package.jsonpkg .以使用脚本   和资产条目。

不这样做会导致在包装过程中出现警告:

  

动态require可能在运行时失败,因为所请求的文件在编译时是未知的,并且不包含在可执行文件中。采用   字符串文字作为'require'的参数,或者保持原样,并且   在“脚本”选项中指定解析的文件名。