Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在节点中要求npm主文件以外的文件?_Javascript_Node.js_Npm - Fatal编程技术网

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

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

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/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可以做很多工作,或者只是“生成导出别名”