当我使用django压缩器对某些客户端组件进行后处理时,我编写了一个简单的npm模块来预编译我的把手模板,发现我需要发送带有几个js文件的npm模块。
目前我只是假设没有人用全局标志安装它,因为我已经“硬编码”了npm模块本身中这些依赖项的路径
我的npm模块的示例布局
/
* / bin
* /lib/main.js
* /vendor/ember.js
现在在main.js中我想使用ember.js文件...目前我的硬编码方法看起来像这样
var emberjs = fs.readFileSync('node_modules/django-ember-precompile/vendor/ember.js', 'utf8');
再次 - 这只能起作用,因为我假设您将其安装在本地,但我想认为node.js有更合法的方式来获取本地嵌入文件
任何人都知道如何改善这一点,使其更加“全球化”友好?
答案 0 :(得分:3)
Node.js的一大优势在于您可以快速启动和运行。这种方法的缺点是你被迫适应它所围绕的设计模式。
这是一个示例,您的方法与Nodes方法的区别太大。 Node期望模块中的所有内容都从模块导出中公开,包括模板。
将readFileSync
移到django-ember-precompile
模块中,然后通过lib/main.js
中的模块导出公开返回的值。
示例:
package.json
{
"name": "django-ember-precompile",
"main": "lib/main.js"
}
lib/main.js
module.exports.ember = readFileSync('vendor/ember.js')
vendor/ember.js
您可以通过
获取模板var template = require('django-ember-precompile').ember
这个例子可以改进,但核心思想是一样的。
答案 1 :(得分:2)
您可以做的是获取当前文件的目录并创建相对于该文件的文件路径。
var path = require('path')
, fs = require('fs');
var vendor = path.join(path.dirname(fs.realpathSync(__filename)), '../vendor');
var emberjs = fs.readFileSync(vendor + '/ember.js', 'utf8');
希望有所帮助!