如何打包带有可选子模块的节点模块?
How do I package a node module with optional submodules?
我正在编写一个 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 文档中弄清楚如何实际构建文件和package.json
.
假设我有这些文件:
./lib/mymodule.js
./lib/yaks.js
./lib/razors.js
./lib/sharks.js
./lib/jets.js
在我的 package.json
中,我将有:
"main": "./lib/mymodule.js"
但是节点如何知道 ./lib/
下的其他文件?
它比看起来更简单 -- 当您通过名称需要一个包时,它会获得 "main" 文件。所以 require('mymodule')
returns "./lib/mymodule.js"
(根据你的 package.json "main" 支持)。要直接要求可选的子模块,只需通过它们的文件路径要求它们。
所以要获取 yaks 子模块:require('mymodule/lib/yaks')
。如果你想做 require('mymodule/yaks')
你需要改变你的文件结构来匹配它(移动 yaks.js 到根文件夹)或者做一些棘手的事情,其中有一个 yaks.js 在根和它只是做类似的事情:module.exports = require('./lib/yaks');
。
祝你好运。听起来毛茸茸的:)
我正在编写一个 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 文档中弄清楚如何实际构建文件和package.json
.
假设我有这些文件:
./lib/mymodule.js
./lib/yaks.js
./lib/razors.js
./lib/sharks.js
./lib/jets.js
在我的 package.json
中,我将有:
"main": "./lib/mymodule.js"
但是节点如何知道 ./lib/
下的其他文件?
它比看起来更简单 -- 当您通过名称需要一个包时,它会获得 "main" 文件。所以 require('mymodule')
returns "./lib/mymodule.js"
(根据你的 package.json "main" 支持)。要直接要求可选的子模块,只需通过它们的文件路径要求它们。
所以要获取 yaks 子模块:require('mymodule/lib/yaks')
。如果你想做 require('mymodule/yaks')
你需要改变你的文件结构来匹配它(移动 yaks.js 到根文件夹)或者做一些棘手的事情,其中有一个 yaks.js 在根和它只是做类似的事情:module.exports = require('./lib/yaks');
。
祝你好运。听起来毛茸茸的:)