我正在编写一个包含核心模块和几个的javascript库
可选的子模块,用于扩展核心模块。我的目标是浏览器
环境(使用Browserify),我希望我的模块的用户只会
想要使用我的一些可选子模块,而不必将其余子模块下载到
客户端 - 就像自定义构建在lodash
中工作一样。
我想象这个工作的方式:
// Require the core library
var Tasks = require('mymodule');
// We need yaks
require('mymodule/yaks');
// We need razors
require('mymodule/razors');
var tasks = new Tasks(); // Core mymodule functionality
var yak = tasks.find_yak(); // Provided by mymodule/yaks
tasks.shave(yak); // Provided by mymodule/razors
现在,假设mymodule/*
命名空间有数十个这些子模块。该
mymodule
库的用户只需要承担带宽成本
她使用的子模块,但不需要像以下那样的离线构建过程
lodash
使用:像Browserify这样的工具为我们解决了依赖图
仅包含所需的代码。
是否可以使用Node / npm以这种方式打包?我是妄想吗?
更新:答案over here似乎表明这是可行的,但我无法从npm文档中了解如何实际构建文件并{{1 }}
说我有这些文件:
package.json
在我的./lib/mymodule.js
./lib/yaks.js
./lib/razors.js
./lib/sharks.js
./lib/jets.js
中,我会:
package.json
但节点如何知道 "main": "./lib/mymodule.js"
下的其他文件?
答案 0 :(得分:5)
它比看起来更简单 - 当你需要一个名字的包时,它会获得“主”文件。所以require('mymodule')
返回"./lib/mymodule.js"
(根据你的package.json“主”道具)。要直接需要可选的子模块,只需通过其文件路径来获取它们。
所以要获得牦牛子模块:require('mymodule/lib/yaks')
。如果你想做require('mymodule/yaks')
,你需要更改你的文件结构以匹配它(将yaks.js移动到根文件夹)或者做一些棘手的事情,在根部有一个yaks.js它只是做某事喜欢:module.exports = require('./lib/yaks');
。
祝你好运这个牦牛。听起来很毛茸茸:))