【问题标题】:Node.js + Webpack + TypeScript: access to path of project with source files (not usage project)Node.js + Webpack + TypeScript:使用源文件访问项目路径(不是使用项目)
【发布时间】:2019-01-13 20:47:34
【问题描述】:

让我们再次明确:在这个问题中我不需要process.cwd,我需要 访问源项目的绝对路径。例如:

  • 源码:C:\Users\user1\projects\lib1\src\library.ts(以后会成为Node Module)
  • 使用库的项目:C:\Users\user1\projects\someProject\src\someProject.ts

所以,我需要在library.ts 中获取C:\Users\user1\projects\lib1\src

我试过了:

webpack.config.js

module.exports = {

  // ...

  target: 'node',
  externals: [nodeExternals()],

  plugins: [
    new Webpack.DefinePlugin({
      __PROJECT_ROUTE_ABSOLUTE_PATH__: __dirname
    })
  ]
};

project-types.d.ts

declare var __PROJECT_ROUTE_ABSOLUTE_PATH__: string;

如果在library.ts 中尝试console.log(__PROJECT_ROUTE_ABSOLUTE_PATH__),在无效的JavaScript 下方 将产生:

console.log(C:\Users\user1\projects\lib1);

路径正确,但缺少引号。我不知道该怎么解释。 但无论如何,我们如何才能找到正确的路径?

还有一个奇怪的现象:如果调用__dirname,只会返回/,所以path.resolve(__dirname, 'fileName') givesC:\fileName`

【问题讨论】:

  • 这是一个 node.js 应用吗?
  • @Prasheel,是的。

标签: node.js typescript webpack


【解决方案1】:

您可以直接使用内置的node.js path 模块。 path 模块提供了用于处理文件和目录路径的实用程序。可以通过以下方式访问:

const path = require('path');

__filename 是当前模块的文件名。这是当前模块文件的解析绝对路径。 (例如:/home/user/some/dir/file.js)

__dirname 是当前模块的目录名。 (例如:/home/user/some/dir)

fs.readFile(path.resolve(__dirname + 'fileName'))

这将解析为文件的路径。

【讨论】:

  • 感谢您的回答。不幸的是,在我的 PS、操作系统 (Windows 10) 和 library.ts 中,__dirname 只返回 /。所以,path.resolve(__dirname + 'fileName') 只返回C:\fileName
  • 当然,不。这是我在父项目C:\Users\me\Documents\PhpStorm\project>gulp development 中使用的控制台命令。 Gulp 运行的库也在开发中。
  • 你能把 gulp 任务也添加到问题中吗??
  • Gulp 任务就像gulp.task('Development', gulp.series(markupPreprocessing));markupPreprocessing 是从库中导入的函数。但是markupPreprocessing的依赖出现了错误,这个依赖也是库的一部分。我还将图像添加到问题中作为证据。
  • 我发现了第一个错误。 __PROJECT_ROUTE_ABSOLUTE_PATH__: JSON.stringify(Path.normalize(__dirname)) 将起作用。剩下就是找出为什么__dirname返回Croot。
猜你喜欢
  • 2020-10-11
  • 1970-01-01
  • 1970-01-01
  • 2020-06-15
  • 2012-03-27
  • 1970-01-01
  • 2019-01-12
  • 1970-01-01
  • 2021-04-20
相关资源
最近更新 更多