【发布时间】:2018-07-10 01:52:02
【问题描述】:
我正在学习node,但之前从未使用过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';
我们可以看到imports有两种种,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(以 import { mydepmod } from 'mydepmod' 开头)安装和运行它的 docker 没有任何问题,所以我假设如果我这样做 npm install mydepmod,它应该也可以工作。
总而言之,我怎样才能让我的 git pull 依赖模块像 npm installed 一样工作。谢谢。
【问题讨论】:
-
简单来说,没有路径的方式是
node module,其他的是你的项目文件,这里有更多关于import的信息。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… -
是的,我在问如何将节点模块用作节点模块,甚至认为我没有做
npm install,而是git get。请参阅我的 OP 以获取更新的错误消息,谢谢。 @Cr。 -
不带路径如果不是nodejs核心模块,import会在项目文件夹下找到
node_modulefloder,如果没有这个模块,会在一级目录下找到node_modulefloder直到根目录。如果没有,则抛出 not found 错误。 -
啊,gotya @Cr.,多次阅读您的答案后,我想我知道我的问题的答案(接下来我会尝试)。谢谢!
标签: node.js npm ecmascript-6 npm-scripts