9

在使用 django 压缩器对一些客户端组件进行后处理时,我编写了一个简单的 npm 模块来预编译我的车把模板,并发现我需要在 npm 模块中附带一些 js 文件。

目前我只是假设没有人使用全局标志安装它,因为我已经在 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 有一种更合法的方式来获取本地嵌入的文件

任何人都知道我可以如何改进它以使其更加“全球”友好?

4

2 回答 2

4

您可以做的是获取当前文件的目录并使您的文件路径相对于该目录。

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');

希望有帮助!

于 2013-03-02T04:46:45.027 回答
3

Node.js 的一大优势是您可以多快地启动和运行。这种方法的缺点是您被迫适应它所构建的设计模式。

这是一个示例,您的方法与 Nodes 方法有很大不同。Node 期望模块中的所有内容都从模块导出中公开,包括模板。

将 移动readFileSyncdjango-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

这个例子可以细化,但核心思想是一样的。

于 2013-01-19T19:53:37.217 回答