Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Meteor 1.4.x中运行为NodeJS v6 LTS ES2015编写的模块?_Javascript_Node.js_Meteor_Ecmascript 6 - Fatal编程技术网

Javascript 如何在Meteor 1.4.x中运行为NodeJS v6 LTS ES2015编写的模块?

Javascript 如何在Meteor 1.4.x中运行为NodeJS v6 LTS ES2015编写的模块?,javascript,node.js,meteor,ecmascript-6,Javascript,Node.js,Meteor,Ecmascript 6,我知道Meteor附带了绑定为依赖项的NodeJ,但我有一个用ES6编写的模块,其中一个类方法中声明了一个默认参数值。目前使用Meteor v1.4.3.2时出现了如下错误: (STDERR) packages/modules.js:374 (STDERR) constructor(options={format:'.json'}) { (STDERR) ^ (STDERR) (STDERR) SyntaxError: Unexpected toke

我知道Meteor附带了绑定为依赖项的NodeJ,但我有一个用ES6编写的模块,其中一个类方法中声明了一个默认参数值。目前使用Meteor v1.4.3.2时出现了如下错误:

(STDERR) packages/modules.js:374
(STDERR)   constructor(options={format:'.json'}) {
(STDERR)                      ^
(STDERR)
(STDERR) SyntaxError: Unexpected token =
  • 我是否需要重写模块以不使用默认参数
  • 或者。。。有没有办法强制Meteor运行NodeV6.x
  • 或者。。。是否有Meteor开发版本的分支,我可以用于我的项目
  • 或者。。。我是否应该引入模块依赖项来为任何版本的节点正确构建模块源
  • 编辑:有人要求输出
    节点-v
    。我肯定在运行NodeV6.10.0

    $ > node -v
    v6.10.0
    
    我还在模块目录中运行
    npm test
    时,使用NodeJS v6.10.0在本地运行并通过构建的chai测试来介绍模块。这个模块是我正在同时开发的本地包。它是使用
    npm安装/path/to/module
    安装在meteor中的

    编辑2:不幸的是,运行
    meteor add ecmascript
    并没有起到作用。这是一个专门为NodeV6+编写的定制NPM模块。Meteor没有使用NodeV6,而是使用4.8

    $ > meteor node --version
    v4.8.0
    

    很明显,虽然NodeV4.8支持很多ES6功能,但它不支持默认函数参数。请参阅:

    1。在Meteor中使用带有
    ecmascript
    导入
    模块

    只要确保你安装了软件包并使用了文件夹结构,你就可以开始了。
    ecmascript
    包肯定支持es6参数。下面是流星文件

    函数参数的默认表达式,在参数未定义时进行计算,…用于捕获剩余参数而不使用arguments对象的rest参数:

    你可以这样添加它

    $ meteor add ecmascript
    
    2。使用
    babel
    传输外部ES6模块-最佳解决方案

    要使用npm模块,您必须向包(npm模块…而不是meteor项目)中添加类似或的内容,以便将es6传输到可以使用的内容。这是发布可由任何节点版本使用的构建的实践(例如,您不希望要求某人以特定节点版本为目标来使用您的包)

    假设模块中有一个
    package.json
    。i、 e.您已经在
    /path/to/module
    中运行了
    npm init

    $ cd path/to/package
    $ npm install --save-dev babel-cli
    
    为两组源创建适当的
    src
    lib
    文件夹

    $ mkdir src // for ES6/ES2015 sources
    $ mkdir lib // for ES5 transpiled sources
    
    然后使用build命令编辑
    package.json
    。这告诉babel在哪里可以找到源代码(
    src
    ),要使用(
    es2015
    )传输的预设,以及在哪里输出ES5源代码(
    lib

    请注意另外几个要点:

    • 如果您使用
      git
      管理源代码,请添加
      .gitinore
      文件以忽略
      /lib/
      目录
    • 如果您正在考虑将模块发布到npm,请添加一个忽略
      /src/
      目录的
      .npmignore
      文件。如果您单独使用
      .gitignore
      发布,npm将使用
      .gitignore
      并忽略您的
      /lib
    此信息是和的混合

    3。使用
    流星建造
    控制流星建造-最后的努力


    另外,我不确定你是否可以升级与meteor捆绑的节点版本,但你总是可以构建你的应用程序并在不同的节点版本中运行。使用命令。然后按照Build project文件夹中的说明进行操作。

    不幸的是,这里的螺母没有裂开。见我的编辑2。
    // package.json
    ...
    "scripts": {
      "build": "babel src -d lib --presets=es2015"
    },
    "main": "./lib/mymodule.js",
    ...