Javascript 如何在节点中要求npm主文件以外的文件?
package.json:Javascript 如何在节点中要求npm主文件以外的文件?,javascript,node.js,npm,Javascript,Node.js,Npm,package.json: ... "name": "mypackage", "main": "src/index.js" ... 目录结构: |- src/ |--- index.js |--- other.js |- src/ |--- index.js |--- other.js |- other.js 我可以通过require('mypackage')要求src/index.js,但我如何要求src/other.js 如果答案是require('mypackage/src/othe
...
"name": "mypackage",
"main": "src/index.js"
...
目录结构:
|- src/
|--- index.js
|--- other.js
|- src/
|--- index.js
|--- other.js
|- other.js
我可以通过require('mypackage')要求src/index.js
,但我如何要求src/other.js
如果答案是
require('mypackage/src/other')代码>,是否有一种方法可以使它成为我可以使用require('mypackage/other')来要求它代码>(即,教学节点模块的源文件目录是什么?AFAIK您必须在根目录中显式地公开它:
目录结构:
|- src/
|--- index.js
|--- other.js
|- src/
|--- index.js
|--- other.js
|- other.js
然后在/other.js中
module.exports = require('src/other.js');
现在您可以执行require('mypackage/other')
我目前正在研究完全相同的事情
Package.json
有一个名为“files”的属性:
“文件”字段是要包含在项目中的文件数组。如果在数组中命名文件夹,则它也将包含该文件夹中的文件
但我还没有找到如何导入/要求这样的文件。
除了能够导入/需要这些文件之外,我真的看不到列出这些文件的另一点
如果文件列在此文件数组中,我可以从包中导入文件
{
"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导入从包中导入css文件:
@import "local-ui-utilities/colors/sets/a.css";
这可能不是您的用例,但PostSS导入只是在引擎盖下使用npm。因此我认为这也适用于您的用例
这个问题和公认的答案似乎是相关的:
您必须显式公开根文件夹中的文件,但许多项目(包括旧版本的lodash)将此作为预发布步骤的一部分。事实上,有一种方法正是@Creynders建议的,添加module.exports=require('./path/to/file'))
根文件夹中的文件。不久前我写了一篇关于入门的文章,但要点很简单
安装
npm安装--保存开发人员生成导出别名
配置
{
"name": "my-package",
"scripts": {
"prepublish": "generate-export-aliases"
},
"config": {
"exportAliases": {
"other": "./src/other"
}
}
}
使用
{
"name": "my-package",
"scripts": {
"prepublish": "generate-export-aliases"
},
"config": {
"exportAliases": {
"other": "./src/other"
}
}
}
const other=require('my-package/other')
免责声明:我是该软件包的作者
不要再使用prepublish
。相反,只使用prepublish
我自己的解决方案:
由于没有人知道如何执行期望的行为,我们不能停滞不前,现在最好的答案是:
解决方案1:
从Patrick solution和他的软件包生成导出别名:我们可以添加一些npm脚本来自动化整个发布过程。
您可以直接在commonjs的/src/
子目录中编写代码,或者使用/dist
中传输的一些新的闪亮ES功能,您的模块文件将公开,因此添加npm脚本:
“脚本”:{
“暴露”:“生成导出别名”,
“预发布”:“npm运行公开”,
“后发布”:“git重置--硬头”
}
或者更多地保存脚本
“脚本”:{
“暴露”:“生成导出别名”,
“预发布”:“git ceckout-b预发布公开和npm运行公开”,
“后发布”:“git添加和&git存储和&git存储放置和&git签出主控和&git分支-d预发布公开”
}
解决方案2:不使用生成导出别名
您可以使用gulp
taskrunner(如果需要,可以进行传输,并将文件直接放入根目录,无需再次复制或移动)
事实上,这是公开步骤,您可以保持prepublishOnly
和postpublish
脚本不变,只需更改expose
脚本。节省时间并直接在根目录中构建。我个人想知道这个问题的答案。感谢您将问题添加到收藏夹中。幸运的是,我认为你第二个问题的答案是否定的。我发现自己本周也想要同样的东西,并对此进行了调查,但我没有找到办法。如果我错了,我也会对答案感兴趣。据我所知,最接近的方法是在开发时从src/
创建src/package.json
和npm链接g、 并在发布时使用其内容,或在构建包时对其执行任何需要的操作。如果要使用完整路径,则应注意从中发出require的当前目录。例如,如果从mypackage中的其他文件夹发出require,则需要编写如下内容:require(“../src/other”)作为发布脚本的一部分,您可以将文件复制到根文件夹中。大多数具有类似用例的项目只需将其所有“公共”模块直接放置到包根文件夹中,仅将子目录用于内部内容。“如果文件列在此文件数组中,我可以从包中导入文件。”谢谢你提供的信息,但是你没有提到你用来导入它的语法!当我这样做的时候,没有JS文件在NPM中发布了:(如果适合你的话:这是一个误导性的答案。文件
数组实际上是NPM发布时应该捆绑的内容的白名单,所以这个“有效”因为你告诉npm将该文件包含在你的捆绑包中,但代价是只包含该文件。正是我所寻找的,效果很好!@Shilpa它会起作用-这是回答海报中更具体的问题“教学节点你的模块的源文件目录是什么”哦,我明白了。感谢您的澄清!一个好的做法是使预发布脚本=“git-ceckout-prepublish-expose&&npm-run-expose”“postpublish”:“git-add.&git-stash&&git-stash&git-drop&&git-ceckout-master”npm-run-expose可以做很多工作,或者只是“生成导出别名”