Javascript 在NPM范围的包中公开两个(或更多)Node.js Babel类
我在一个公共范围的包中有两个Node.js Babel类,我想公开它们 公共范围NPM中的类: Index.jsJavascript 在NPM范围的包中公开两个(或更多)Node.js Babel类,javascript,node.js,npm,babeljs,Javascript,Node.js,Npm,Babeljs,我在一个公共范围的包中有两个Node.js Babel类,我想公开它们 公共范围NPM中的类: Index.js export default class Index { constructor() { console.log("abc!"); } } SecondClass.js export default class SecondClass { constructor() { console.log("SecondClass! Se
export default class Index {
constructor() {
console.log("abc!");
}
}
SecondClass.js
export default class SecondClass {
constructor() {
console.log("SecondClass! SecondClass!! SecondClass!!!");
}
}
在公共范围的NPM中,我只能设置一个主文件:
"main": "./dist/index.js",
在使用项目中,我尝试导入它们,但是我失败了
import { Index, SecondClass } from '@my-scope/my-package';
new Index();
new SecondClass();
依赖项:
"devDependencies": {
"babel-cli": "^6.26.0",
"babel-preset-es2015": "^6.24.1"
}
我怎么做?我能设法做到吗
更新1:即使在软件包中使用
文件也不起作用,更糟糕的是,一旦我使用了它,当我在usage项目中安装我的作用域软件包时,所有JS
文件都消失了
"files": [
"./dist/index.js",
"./dist/SecondClass.js"
],
更新2:我尝试使用前面提到的“文件”:[…]
,一旦找不到任何解决方法,我就在NPM Github中发布了一个问题:有可能,尝试以下方法:
Index.js
用法
常用的方法是创建一个名为index.js的文件,以便重新导出文件夹中的不同模块:
/src
/foo.js
/bar.js
/index.js
// index.js
export * from './foo';
export * from 'bar';
这将允许您直接从文件夹导入,而不是从特定文件导入
import {foo, bar} from './src';
经过几个小时的研究,我找到了一个解决办法,使用普通代码,但保持巴别塔的使用
对于作用域NPM包中的主JS文件,例如index.JS
,必须导出所有类,如:
import SecondClass from './SecondClass';
import ThirdClass from './ThirdClass';
export {
SecondClass,
ThirdClass
};
在您的使用项目中,您可以导入如下内容:
import { SecondClass, ThirdClass } from '@my-scope/my-package';
new SecondClass();
new ThirdClass();
您的作用域NPM包中的package.json只需要公开index.js
像“main”:“/dist/index.js”
依赖项和版本:
- “babel cli”:“^6.26.0”
- “babel-preset-es2015”:“^6.24.1”
- $npm-v:3.10.10
- $node-v:v6.11.3
我非常喜欢这个想法,但如果我有多个,超过两个,是否有通用的解决方案?我不知道其他解决方案。但是,如果我们想导出许多对象,我认为好的旧的模块export
会更甜美,但不推荐在您的情况下使用。嗯,不确定为什么它不能被编译。可能是在你只能导出为json
像你的答案可能会工作。我给-1,因为你编辑了你的问题后,我的答案以下我的解决方案+你的上述评论没有意义!伙计。对我来说没关系。我修正了我的答案,这样就不会给别人带来麻烦。很高兴您找到了解决方案:)我没有理解您的方法,我正在使用软件包,那么如何使用src
文件夹?!这只是一个例子,惯例是创建一个index.js文件来导出其余的文件。你试过了吗?基于你的想法,我尝试了很多方法,但都没有成功,你有任何有效的用例吗?谢谢您应该寻找ES6导入/导出教程,您需要了解一些背景知识才能理解它们是如何工作的。你也可以在github上寻找js库或项目,你会明白的。
import SecondClass from './SecondClass';
import ThirdClass from './ThirdClass';
export {
SecondClass,
ThirdClass
};
import { SecondClass, ThirdClass } from '@my-scope/my-package';
new SecondClass();
new ThirdClass();