使用浏览器化的节点应用程序访问module.exports

时间:2018-08-21 16:17:13

标签: javascript node.js aws-lambda browserify

我们正在尝试对节点应用程序进行浏览器

样本文件(index.js)

module.exports = {
  index: () => 'test',
};

Browserify命令

browserify src/index.js > dist/bundle.js --node

如果我们使用文件来要求和控制台

console.log(require('src/index'));   // { index: [Function: index] }
console.log(require('dist/bundle')); // { } 

我们的期望是bundle.js将与index.js导出相同。

有人能指出我们做错了什么吗?


其他信息

这不是我们的应用,这是演示问题的示例

我们当前正在将整个应用程序以入口点src/index.index发送到AWS Lambda,目标是仅发送bundle.js文件并能够拥有入口点bundle.index < / p>

bundle.js

(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
module.exports = {
    index: () => 'test',
};

},{}]},{},[1]);

2 个答案:

答案 0 :(得分:1)

您需要使用transform3d标志。如果我复制您在问题中描述的设置并执行:

--standalone

然后,我可以在其上运行一个交互式Node会话,并按照您期望的方式使用该库:

$ browserify src/index.js --standalone mylib > dist/bundle.js

$ node > require("./dist/bundle").index() 'test' 标志告诉Browserify将您的代码包装在UMD stub中,该代码允许将软件包作为CommonJS模块,AMD模块或普通脚本加载(即不使用模块系统) 。您通过--standalone传递的参数表示在“普通脚本”情况下库将采用的名称。因此,在上面的示例中,如果要在没有任何模块系统的浏览器中加载库,则可以以--standalone的身份运行index

答案 1 :(得分:0)

您可以使用serverless进行配置,非常容易。无需为此使用browserify cli。

请遵循以下官方文档来设置serverless cli。

  1. Installation
  2. AWS - Credentials
  3. Quick Start

所有设置完成后,您就可以使用无服务器cli将lambda函数部署到AWS。请按照以下步骤设置browserify。

  1. browserify安装为开发依赖。
  2. serverless-plugin-browserifier安装为开发依赖项。
  3. 将插件添加到您的serverless.yml文件中并设置package.individually to true。 (Ref

    plugins:
      - serverless-plugin-browserifier
    
    package:
      individually: true
    

注意:亲自尝试过并且可以正常工作。