javascript - path.join 在 require 语句中
问题描述
我尝试Path.join
在require
这样的语句中使用:
import Path from 'path'
const assetPath = Path.join(process.cwd(), `./lib/asset-manifest.json`)
console.log(assetPath)
'/home/dev/Website/lib/asset-manifest.json'
console.log(
assetPath === '/home/dev/Website/lib/asset-manifest.json'
)
true
const assets = require(assetPath)
但这会引发错误:
Error: Cannot find module '/home/dev/Website/lib/asset-manifest.json'
虽然文件在那里并且require
如果我手动将字符串放入其中可以工作:
const assets = require('/home/dev/Website/lib/asset-manifest.json')
所以我想知道为什么不起作用Path.join
?require
此致
解决方案
import path from 'path';
// you can use process.cwd() if you want
const assetPath = path.join(path.dirname(require.main.filename), `lib/asset-manifest`);
const test = () => {
var assets = require(assetPath);
console.log(assets);
};
export default test();
您需要将 require 包围在函数内。否则 require 将在路径分配给assetPath 变量之前运行。这是因为 require 是 SYNC 并且从调用它的文件或函数的角度运行。因为您说这是必需的,所以它会在其他任何事情之前立即执行。
前进的最佳实践是停止对 json 文件使用 require。需要缓存内容,因此如果生产环境中的 JSON 文件发生更改,您的用户可能会获得旧数据。而是使用fs.readfile(path, (err, data) => JSON.parse(data))
你可能想在你的情况下尝试一个 webpack 配置。
const requireJSON = typeof __webpack_require__ === "function" ? __non_webpack_require__ : require;
const assets = requireJSON(assetPath);
这应该返回要求的所有可能路径。
推荐阅读
- javascript - 获取错误消息原因 get addrinfo ENOTFOUND localhost
- sorting - 使用 frama-c 的递归快速排序的正式证明
- wcf - 增加 WCF 服务终结点大小配置的问题
- python - SimpleCookie 泛型类型
- java - 将配置传递给 Kafka 客户端的推荐方法
- typescript - 打字稿对象值扩展类型
- authorization - ActivePivot 授权
- python - vscode 运行所有测试(pytest)失败
- oracle - 2个符号oracle之间的相似性
- openid-connect - prompt=login 和 prompt=none 如何在 OpenAM-6.5.2 中工作