ES6导入,节点库和我的模块

时间:2018-01-31 03:24:09

标签: node.js npm ecmascript-6 npm-scripts

我正在学习节点,但之前从未使用过ES6 / javascript / TypeScript,所以请耐心等待......

我正在尝试在普通的ES6中编写nodejs应用程序。从以下示例(取自here),

import fs from 'fs';
export default class Animal {

  constructor(name){
    this.name = name ;
  }

  print(){
    console.log('Name is :'+ this.name);
  }
}

import Animal from 'path/to/Animal.js';

我们可以看到import的{​​strong> 两种 类型,require的ES6方式。一个是没有路径(import fs from 'fs';),另一个是路径。

所以我的第一个困惑是,here它说,

  

为了与CommonJS兼容并为将来的功能做准备,不允许以./或../开头的相对路径(在ES6中):

// Not allowed:
import * as foo from 'foo.mjs';
import * as foo from 'lib/foo.mjs';

import fs from 'fs'是对还是错?

我正在尝试编写的普通ES6 nodejs应用程序基于npm模块,但因为它几乎每天都更新,所以我从它的git中取而代之的是

npm install mydepmod

这反过来使其示例代码以

开头
import { mydepmod } from 'mydepmod'

不适合我。我得到的错误是,

module.js:557
    throw err;
    ^

Error: Cannot find module 'mydepmod'
    at Function.Module._resolveFilename (module.js:555:15)
    at Function.Module._load (module.js:482:25)
    at Module.require (module.js:604:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/path/to/example/the-test.js:19:21)
    at Module._compile (module.js:660:30)
    at Object.Module._extensions..js (module.js:671:10)
    at Module.load (module.js:573:32)
    at tryModuleLoad (module.js:513:12)
    at Function.Module._load (module.js:505:3)

所以我的最后一个问题是如何使其有效?

顺便说一句,我试过它的docker从docker(以import { mydepmod } from 'mydepmod'开头)安装和运行没有任何问题,所以我假设我npm install mydepmod,它应该也可以。

总而言之,我如何让我的git pull依赖模块就像npm install ed一样。谢谢。

1 个答案:

答案 0 :(得分:1)

使用带有前缀'./'的相对路径导入然后从该文件加载模块时,您可以提供类似'/ path / to / module'的完整路径。

导入任何没有任何路径的模块时,节点会查找该模块

  • 位于node_modules文件夹中,位于该目录中,或位于package.json存在的任何父目录中
  • 如果无法从该目录加载模块,则节点尝试从用户目录中的全局node_modules文件夹加载该模块(例如,/usr/lib/node_modules/)。
  • 如果节点在此阶段无法加载模块,则会抛出错误Can not find module

Here是有关如何工作的详细说明。 要求和导入/导出类似,this文章给出了需求和导入/导出之间的区别。

对于本地node_modules和全局node_modules之间的区别,here是一个讨论。

全局node_modules的位置在不同的os环境中是不同的。根据{{​​3}}回答:

在Unix系统上,全局安装时,它们通常位于/usr/local/lib/node/usr/local/lib/node_modules。如果将NODE_PATH环境变量设置为此路径,则可以通过节点找到模块。

Windows XP - %USERPROFILE%\Application Data\npm\node_modules Windows 7,8和10 - %AppData%\npm\node_modules