package.json中的相对路径?

时间:2015-01-21 23:26:06

标签: json npm gulp browserify

我有一个src/main/webapp/com/mycompany/frontend/page/index.js取决于target/webjars/log4javascript/1.4.10/log4javascript.js的项目。

我已将package.jsonindex.js一起添加以下内容:

{
    "browser":
        {
            "log4javascript": "../../../../../../../target/webjars/log4javascript/1.4.10/log4javascript.js"
        }
}

我在target目录中有很多其他依赖项。有没有办法让我避免为每个依赖项重复../../../../../../../target/

2 个答案:

答案 0 :(得分:0)

查看this article中的使用非相对路径部分。

您可以使用grunt-browserify的aliasMapping选项指定应用的根目录:

aliasMappings: [{
  cwd: 'src',
  dest: 'myApp',
  src: ['**/*.js']
}]

然后你可以直接引用根路径中的所有内容,而不必使用任何可怕的../

require("myApp/target/webjars/log4javascript/1.4.10/log4javascript.js")

当然,这并不能解决它仍然是一个很长的道路的问题。

这篇文章的下一段提出了一个非常好的观点:如果你在应用程序的另一端调用了这样的东西,这是一个很好的迹象,表明事情可能没有正确构建。

您可以将功能拆分为更小的模块吗?也许让log4javascript成为自己的模块?


在下面的讨论中添加我的答案:

如果log4javascript在您的package.json文件中作为浏览器(非NPM)模块,您应该只需要require('log4javascript')

答案 1 :(得分:0)

一个选项是将包含本地模块或符号链接的目录放在node_modules中,例如node_modules/app,然后将您的需求引用为app/...,例如{ "browser": { "log4javascript": "app/target/webjars/log4javascript/1.4.10/log4javascript.js" } } 。我相信这会起作用

node_modules/log4javascript

或者您可以根据需要构建它,例如/whatever/target/webjars/log4javascript(如果您有符号链接,可以指向require())。

这使得browserify('app/entry').transform(whatever)能够以与npm模块相同的方式找到它,而不将其发布到npm。这样做的主要缺点是它破坏了以编程方式配置变换的能力,例如:使用app/entrynode_modules和依赖关系图中{{1}}下的其他文件将不会应用转换。