2017-07-29 108 views
0

我正在写一些运行在节点上的Javascript,并利用node_modules中的模块。其中一些碰巧在ES6中。nodejs v5如何让我们使用ES6模块?

不幸的是我了解到我的JS将被部署在节点v5上。所以我把它编译成ES5的速度很快babel src-dir --out-dir out-dir

但是当然,当我在节点中运行代码时,只要依赖关系导致node_modules中的任何ES6文件就会立即生效。

Node v6 +运行顺畅,但我无法控制部署环境。

我应该如何处理 - 我是否应该考虑转发所有节点模块呢?这似乎很多工作。我在这里错过了很明显的东西吗

.babelrc是这样的:

{ 
    "presets": [ 
     [ "es2015" ], 
    ], 
    "plugins": [] 
} 
+0

'node_modules'是公共的吗?公共事物对NPM不起作用通常是不好的形式。 – loganfsmyth

+0

是所有公众。它们都与节点v6 +一起工作,但我将部署到节点v5,并且某些模块将不能与节点v5一起使用。 – ukosteopath

+0

你有没有办法让节点6在生产中?您不需要替换旧的节点符号,可以将不同的节点运行时添加到您的服务器。 – MinusFour

回答

1

如果你依靠NPM模块不会在你的环境中工作,只有四个选择,我能想到的:

  1. 切换到在您自己的环境中工作的模块,这些模块涵盖相同的功能。
  2. 通过修改它们解决问题的模块在目标环境中工作
  3. 沟模块完全和编写必要的代码自己
  4. 找到该模块的早期版本(通过Github上),这是一个版本兼容v6之前的node.js。除非这是去年首次发布的版本,否则可能会有早期版本与较早版本的node.js一起使用。

修正可能涉及修复一个或两个错误,或者它可能涉及将它们自己转换成ES5目标 - 取决于问题是什么。

可能有2)和3)的组合,你只需从模块中借用你需要的东西,然后修复节点v5并将其添加到项目中或在Github上分支。 NPM模块通常是开放源代码,可让您“自行修复”选项。

注意:如果您精确地显示了在节点v5下运行某个问题的确切示例,我们可以更具体地说明哪个选项可能最简单。但是,没有这样的细节,我们所能做的只是描述您可以选择的整体选项。


哦,我会锤击云服务,让他们知道这个响亮而清晰。 5.x没有来自node.js基金会的长期支持,从未做过。它不应该是一个部署版本,因为奇数版本总是实验性的,永远不会获得长期支持。 6.x是9个月前发布的node.js的当前活动LTS(长期支持)版本。即使v4.x一直在维护,直到2018年4月。如果您的托管服务提供商只提供5.x,并且不让您运行自己的版本或选择受支持且更现代的版本,它们并不是一个非常优秀的节点应用托管提供商。

+0

在我的开发环境中,像rollup.js和babel.io这样的工具组合如何将所有必需的文件(我的+模块)转换为可在节点v5上工作的包?这是否要求比它的价值更多的麻烦? – ukosteopath

+0

@ukosteopath - 你还没有告诉我们什么是实际问题。据我所知,这些问题与API v6 +中的API更改或新功能有关,并且转发毫无帮助。就我个人而言,我不会让自己的代码更加复杂而不是需要。我可能会分开处理每个模块,而不是创建一个服务器端代码不需要的包。 – jfriend00

+0

如果不在这里粘贴20个冗长的文件,详细解释它非常棘手。 我总结尽我所能。 感谢您的建议,我将探讨您提到的选项。 – ukosteopath