我有一个非常标准的节点模块,使用babel来转换我们的代码,然后输出到&#lib;'夹。 package.json指向' main' to' lib / index.js'这样人们就可以require('my-module')
但是,如果我有一个子目录(例如my-module / server),那么当他们使用my-module时,他们必须require('my-module/lib/server')
。我已经看到人们把post.buson复制到lib中的post构建步骤,但这对我来说只是感觉hacky和错误。在npm中是否有任何方法可以指定一个主目录,其中我的模块的任何require()都将从该目录开始?那么我可以让用户在没有lib部分的情况下需要(' my-module / server')...
答案 0 :(得分:1)
我认为最好的解决方案是你有一个主要的index.js和所有子模块,所以你可以做一些像queue_runners=tf.get_collection(tf.GraphKeys.QUEUE_RUNNERS)
filename_queue_runners=[qr for qr in queue_runners if 'input_producer' in qr.name]
for qr in filename_queue_runners:
for k in prebuffer_amount:
sess.run(qr._enqueue_ops[0])
答案 1 :(得分:0)
在没有看到您的文件夹结构的情况下很难,但您可以:
module.exports =
导出babel输出的package.json
{ "main": "lib" }
LIB / index.js
module.exports = require('./path-to-transpiled-code.js');
// Now also export all the other stuff in this folder dynamically
fs.readdirSync(DIRECTORY_TO_EXPORT, function (err, files) {
if (err) { throw err; }
files.forEach(function (file) {
if (file !== 'index.js') {
fs.symlinkSync(path.join(__dirname, file), path.join(DIRECTORY_TO_EXPORT, file));
}
})
});
答案 2 :(得分:0)
如果我的问题是正确的,那么你唯一需要的就是将你的模块主路径指向package.json。
{
"main": lib/index.js
}
其中index.js是模块的主文件。 有关更多信息,请查看npm文档here
答案 3 :(得分:0)
让我们假设您有一个包my-module
,并在其中有一个子文件夹my-submodule
。
您的my-module/package.json
文件将包含以下行:
{
...,
"main": "lib/index.js",
...
}
这将允许行
要求您的包裹var myMod = require('my-module');
要允许对子模块使用相同的语法,您所要做的就是将package.json文件放在子模块文件夹中。它应包含以下内容:
{
"main": "lib/index.js"
}
之后,您可以使用简单的require语法:
var mySubMod = require("my-module/my-submodule");
答案 4 :(得分:0)
您有多种选择如何实现目标。
在主模块的入口点,您可以导出要从模块中公开的所有内容。
+
完全控制公共API的一部分以及被视为“私有”的内容+
玩ES2015模块规范非常好-
不满足您要求组件(server
)通过直接require()
调用服务器模块的路径示例:强>
'use strict'
// this is whatever is the primary export of your module - be it a
// function, object or anything else which can have other properties
// assigned to it
const main = require('./main')
const server = require('./server')
module.exports = main
module.exports.server = server
// ...
<强>用法:强>
'use strict'
const mymodule = require('my-module')
const server = require('my-module').server
const { server } = require('my-module')
import { server } from 'my-module'
您可以为要在模块的根文件夹中公开API的一部分公开的每个组件创建单独的文件。
+
满足您通过特定路径要求组件的要求-
结构略微复杂,每个公共组件需要额外的文件-
与ES2015模块不兼容(您必须使用组件的完整路径,不能使用解构语法)示例文件夹结构:
my-module
├── lib
│ ├── index.js
│ └── server.js
└── server.js
my-module / server.js 文件只会指向实际的实现:
'use strict'
module.exports = require('./lib/server')
应该注意的是,虽然技术上可行,但消费者依赖完整的模块路径并不是最佳选择,因为文件夹和文件结构现在已成为API的一部分,因此移动文件突然发生了重大变化。每当我发现自己需要以这种方式需要模块的组件时,我就把它视为我正在搞乱该模块的内部构件,并且我希望我的代码能够通过该模块的补丁版升级来实现收支平衡。