如何在节点中要求除npm主文件以外的文件?

时间:2015-10-08 13:04:00

标签: javascript node.js npm

的package.json:

...
"name": "mypackage",
"main": "src/index.js"
...

目录结构:

|- src/
|--- index.js
|--- other.js

我可以src/index.js使用require('mypackage');,但我怎么能要求src/other.js

如果答案是require('mypackage/src/other');,有没有办法让它成为我所需要的require('mypackage/other');(即教学节点源文件目录是什么模块?

4 个答案:

答案 0 :(得分:11)

AFAIK您必须在根目录中明确公开它:

目录结构:

|- src/
|--- index.js
|--- other.js
|- other.js

然后在/other.js

module.exports = require('src/other.js');

现在你可以require('mypackage/other')

答案 1 :(得分:4)

我目前正在研究同样的事情。

Package.json有一个名为' files':

的属性

http://blog.kewah.com/2014/npm-as-a-front-end-package-manager/

https://docs.npmjs.com/files/package.json

  

"文件" field是要包含在项目中的文件数组。如果您在数组中命名文件夹,那么它还将包含该文件夹中的文件。

但我还没有找到如何导入/要求这样的文件。 我没有真正看到列出这些文件的另一点,以便能够import/require他们?

如果文件列在此文件数组中,我可以从包中导入文件。

{
    "name": "local-ui-utilities",
    "version": "0.0.1",
    "description": "LOCAL UI Utilities",
    "main": "index.jsx",
    "author": "Norbert de Langen",
    "license": "none",
    "dependencies": {
    },
    "files": [
       "/colors/sets/variables.css"
    ]
}

我可以使用postcss-import从包中导入css文件:

@import "local-ui-utilities/colors/sets/a.css";

这可能不是你的用例,但postcss-import只是在引擎盖下使用npm。所以这也适用于你的用例,我想。

这个问题和接受的答案似乎有关: Node/NPM: Can one npm package expose more than one file?

答案 2 :(得分:1)

您必须在根文件夹中明确公开该文件,但许多项目(包括旧版本的lodash)在预发布步骤中执行此操作。事实上,a package完全符合@Creynders的建议,在根文件夹中添加了module.exports = require('./path/to/file')个文件。不久前我在开始时写了guide,但要点很简单。

安装

npm install --save-dev generate-export-aliases

<强>配置

{
  "name": "my-package",
  "scripts": {
    "prepublish": "generate-export-aliases"
  },
  "config": {
    "exportAliases": {
      "other": "./src/other"
    }
  }
}

使用

const other = require('my-package/other')

免责声明:我是该软件包的作者

答案 3 :(得分:1)

我自己的解决方案:

由于没有人知道如何执行所需的行为,所以我们不能停滞不前,现在最好的答案是:

解决方案1:

从Patrick解决方案及其软件包generate-export-aliases:我们可以添加一些npm脚本来自动化整个发布过程。 您可以直接在./src/子目录中的commonjs中编写代码,或者使用./dist中转译的一些新的闪亮ES功能,将公开您的模块文件,因此添加npm脚本:

"scripts": {
  "expose": "generate-export-aliases",
  "prepublish": "npm run expose",
  "postpublish": "git add . && git reset --hard HEAD"
}

或SAVER脚本

"scripts": {
  "expose": "generate-export-aliases",
  "prepublish": "git ceckout -b prepublish-expose && npm run expose",
  "postpublish": "git add . && git stash && git stash drop && git checkout master && git branch -d prepublish-expose"
}

解决方案2:没有generate-export-aliases

您可以使用gulp任务运行程序(如果需要,可以进行转换并将文件直接放在根目录中,而无需再次复制或移动)。

实际上,这是暴露步骤,您可以保持prepublishpostpublish脚本不变,而只需更改expose脚本。节省时间并直接在根目录中构建。