Pro Yearly is on sale from $80 to $50! »

Node.js Compiler: compiling your Node.js application into a single executable

Node.js Compiler: compiling your Node.js application into a single executable

Node.js Compiler:将您的 Node.js 应用编译成单个可执行文件

https://github.com/pmq20/node-compiler

8002c84eb4c18170632f8fb7efb09288?s=128

Minqi Pan

March 01, 2017
Tweet

Transcript

  1. Node.js Compiler Minqi Pan

  2. I’m Minqi Pan one of Node.js Collaborators

  3. before Node.js Compiler

  4. None
  5. None
  6. Slow Installation • “npm install fengdie” took 2m12.560s • Great-Wall’ed

    in China • Remembered to use npm -g with sudo?
  7. Too much complexities • “Should I care about those WARN’s?”

    • “or should I not?”
  8. Node.js Runtime? • Making sure your user used the correct

    Node.js • Could multiple Node.js versions co-exist? • Wish to use ECMAScript 2017?
  9. after Node.js Compiler

  10. None
  11. None
  12. None
  13. None
  14. None
  15. None
  16. None
  17. None
  18. How to Compile

  19. None
  20. None
  21. None
  22. None
  23. None
  24. None
  25. None
  26. None
  27. None
  28. How it Works

  29. Introducing /__enclose_io_memfs__ a “mounted” disk in RAM for your project

  30. None
  31. Basic Idea System calls on paths starting with
 /__enclose_io_memfs__
 are

    redirected to the RAM while others to the FS
  32. /__enclose_io_memfs__/… others Image Curtesy: Evan-Amos

  33. None
  34. None
  35. None
  36. But there are so many API’s • require, require.resolve •

    fs.readFile, fs.readFileSync, fs.ReadStream • fs.readlink, fs.stat, fs.statSync, fs.readlinkSync • …
  37. Yet we did this in 8 files only

  38. That’s because… https://github.com/pmq20/libsquash libsquash https://github.com/pmq20/node-compiler Node.js Compiler

  39. Introducing SquashFS

  40. SquashFS • a compressed read-only file system • used by

    the Live CD versions of Arch Linux, Debian, Fedora, Gentoo, Mint, Salix, Ubuntu • used on OpenWrt and DD-WRT router firmware
  41. fengdie’s
 node_modules/ 148M fengdie.squashfs 16M

  42. SquashFS • Introduced in 2009 with Linux 2.6.29 • File

    format very stabilized • Unsquashfs and mksquashfs have win32 ports; 7-Zip on win32 also supports SquashFS • Part of kernel; GPL Licensed
  43. Introducing libsquash

  44. https://github.com/pmq20/libsquash libsquash • MIT licensed • Super embeddable • 1

    dependency only, which could be statically linked • Compiles on 3 platforms, even Windows XP with VC++ 2010 • Introduces VFD - virtual file descriptor, intercepting system calls unobtrusively libsquash
  45. API of libsuqash mirroring system calls

  46. Virtual File Descriptor generated by a duplicating file descriptor 0

  47. Use libsquash unobtrusively Just include a header and it’s done!

  48. Use libsquash unobtrusively Win32 API works as well

  49. Hard-code an Entrance

  50. node ~/fengdie/bin/cli.js (argv[1] preset to /__enclose_io_memfs__/bin/cli.js) ./fengdie

  51. fengdie/*

  52. fengdie/* fengdie.squashfs mksquashfs

  53. fengdie/* fengdie.squashfs libsquash compile

  54. fengdie/* fengdie.squashfs libsquash Node.js Runtime compile

  55. fengdie/* fengdie.squashfs libsquash Node.js Runtime

  56. fengdie/* fengdie.squashfs libsquash Node.js Runtime

  57. fengdie/* fengdie.squashfs libsquash Node.js Runtime fengdie.exe Statically Link Statically Link

  58. fengdie/* fengdie.squashfs libsquash Node.js Runtime fengdie.exe Statically Link Statically Link

  59. fengdie.exe Distribute and Enjoy

  60. Download & Install

  61. nodec is also enclosed Operating System Architecture Download Link Windows

    x86 https://sourceforge.net/projects/ node-compiler/files/v0.9.4/ nodec.exe/download macOS x86-64 https://sourceforge.net/projects/ node-compiler/files/v0.9.4/nodec- darwin-x64/download Linux x86-64 https://sourceforge.net/projects/ node-compiler/files/v0.9.4/nodec- linux-x64/download
  62. Install on Windows • SquashFS Tools 4.3 • Python 2.6

    or 2.7 • Visual Studio 2015 Update 3, all editions including the Community edition (remember to select "Common Tools for Visual C++ 2015" feature during installation). • Then download the executable nodec.exe and run it from the VC++ or VS Command Prompt.
  63. Install on macOS • SquashFS Tools 4.3: brew install squashfs

    • Xcode + Command Line Tools • Python 2.6 or 2.7 • GNU Make 3.81 or newer
  64. Install on macOS • curl -L https://sourceforge.net/projects/node- compiler/files/v0.9.4/nodec-darwin-x64/ download >

    nodec • chmod +x nodec • ./nodec
  65. Install on Linux • SquashFS Tools 4.3 • gcc and

    g++ 4.8 or newer, or • clang and clang++ 3.4 or newer • Python 2.6 or 2.7 • GNU Make 3.81 or newer
  66. Install on Linux • curl -L https://sourceforge.net/projects/node- compiler/files/v0.9.4/nodec-linux-x64/download > nodec

    • chmod +x nodec • ./nodec
  67. Licensing

  68. Commercial-license-free

  69. Proprietary-license-free

  70. GPL-free

  71. Super Redistributable libsquash MIT Node.js MIT libuv MIT v8 BSD

  72. Super Redistributable zlib zlib License openssl Apache
 4-clause BSD HTTP

    Parser MIT c-ares MIT
  73. Applications

  74. Quicker Install / Upgrade • Quicker upgrading embedded node.js applications

    / plugins • Quicker upgrading embedded node.js applications / plugins • E.g. fengdie inside the Tea IDE
  75. Enabling Node.js Developers • Build softwares instead of modules •

    Distribute to non-technical users • Merchandise by building personal / enterprise softwares
  76. Code Protection • Enable code signing for the entire application;

    guarantee not being altered or corrupted • Prevent hacking by users modifying exposed Javascript source code • Applicable to NW.js applications (DingTalk) and Electron applications (Tea)
  77. Tips

  78. Use --tmpdir=/a/fixed/location

  79. Use CentOS release 5.8
 with gcc and g++ 4.8
 (possibly

    from devtoolset-2 of slc5-devtoolset)
  80. Use Windows
 with a big Virtual Memory

  81. Check dependencies using Dependency Walker, otool, ldd
 before releasing

  82. https://github.com/pmq20/node-compiler Thank You