如何从node_modules获取节点包消费者目录
How to get node package consumer directory from node_modules?
我正在尝试创建一个简单的节点模块,该模块在使用它的应用程序中创建一组文件夹。我导出了一个简单的createLayout
函数来创建文件夹。我将更改推送到 git 并从另一个文件夹进行了npm i
。为了解释起见,让我们调用模块creator
和consumer
。当我尝试在消费者中调用createLayout时,我遇到了几个问题。我在开车E:'
。
以下是创建者中的索引.js:
import {sync} from 'mkdirp';
export function createLayout(config) {
sync('./folder1');
}
和指数.js在消费者:
var createLayout = require('creator').createLayout;
createLayout();
// with config createLayout({path: __dirname})
这将导致在 E:'' 中创建文件夹不是相对于消费者。所以我尝试包括__dirname
:
sync(__dirname + '/folder1');
同样,这也会在 E:'' 中创建一个文件夹不是相对于消费者。我在各种模块中搜索了位,以查看它们在读取配置文件时的表现,例如 webpack 使用 process.cwd
.所以我也试过了。
sync(process.cwd() + '/folder1');
相同,结果在 E:'' 中创建文件夹不是相对于消费者。然后我尝试将__dirname或 cwd 传递到一个config
对象。
// get __dirname from the `consumer` in config.path
sync(config.path + '/folder1');
但它最终出现以下错误:
Error: EPERM: operation not permitted, mkdir 'E:''
我尝试在创建者和消费者中记录所有值:
console.log(__dirname, process.cwd(), config.path)
// creator: / / E:'projects'consumer
// consumer: E:'projects'consumer E:'projects'consumer E:'projects'consumer
我正在使用带有 babel 的 webpack 来打包创建者,消费者中的普通 js。我不知道我做错了什么。我对nodejs的工作方式很陌生。
更新
我注意到这只有在我使用 webpack 构建创建器时才会发生。一个简单的module.exports
可以像任何人期望的那样正常工作。所以我包括我的 webpack 配置文件:
module.exports = {
entry: [
'./index.js'
],
output: {
filename: 'creator.js',
path: __dirname + '/dist',
library: 'creator',
libraryTarget: 'umd'
},
module: {
loaders: [
{
test: /'.js$/,
exclude: /node_modules/,
loader: 'babel'
}
]
},
externals: {
fs: 'fs'
}
};
正确的解决方案是在配置中添加以下行:
target: 'node'
这将使 Webpack 忽略像 fs
和 mkdirp
这样的模块以及其他一些模块。
现在不再需要指定externals
。
之前给出的错误解决方案:
只需将mkdirp
添加到外部,它就会解决您的问题:
externals: {
fs: 'fs',
mkdirp: 'mkdirp'
}
- 节点导出返回一个空对象
- 可以前端maven插件使用节点,npm已经安装
- 在jstree中,如何将指定的节点集中到大型树上
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- 如何从模块链中调用函数.导出到节点中
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- d3基于用户选择动态更新节点
- 有条件更新d3.js力图中节点的最佳方法
- 如何处理node.js节点mongodb中的连接和查询队列
- 将DOM节点值与字符串Javascript进行比较
- 节点fs.stat名称未定义
- 无法安装节点sass相关性
- 节点协同与生成器和Promise并行流量控制
- 节点.js将变量显示为 HTML
- 将节点数据分配给另一个变量jstree
- 如何在动态创建的节点上绑定函数
- 承诺在非节点式回调上使用Bluebird
- 通过从节点父级获取所有子级对节点进行排序(获取子级数组)
- 茉莉花节点测试;t正在运行
- 如何从node_modules获取节点包消费者目录