加载非js文件时清除Node.js的缓存,例如graphql语言定义

问题描述 投票:2回答:2

我想从我的graphql定义中清除Node的缓存,但在我对require('my.graphql')语句所在的文件进行更改之前没有任何反应。我认为这个问题与this one有关,我试图这样做:

Object.keys(require.cache).forEach(function(key) {
  delete require.cache[key];
});

但它不会重新加载代码。必须有一些我想念的其他缓存。

由于示例有点长,我已经分叉了这个repo并创建了一个graphql-branch,你可以安装和测试适应src/schema.graphql文件:

git clone [email protected]:gforge/graphql-relay-mongodb-pagination.git
cd graphql-relay-mongodb-pagination
git checkout git checkout mongoose-w-gql-lang 
npm install

require('my.graphql')是通过babel-plugin-inline-import介导的。

node.js babeljs graphql
2个回答
3
投票

事实证明问题实际上是Babel's cache而不是Node。在package.json中更改开头:

...
"start": "babel-node ./src/index.js",

...
"start": "BABEL_DISABLE_CACHE=1 babel-node ./src/index.js",

解决了这个问题。


0
投票

巴贝尔文档建议

BABEL_CACHE_PATH=/foo/my-cache.json babel-node script.js  # default in /tmp/
BABEL_DISABLE_CACHE=1 babel-node script.js
require('babel-register')({ cache: false });

但是在IntelliJ中进行调试时,这在Windows 7上不起作用。经过大量的谷歌搜索,我发现它真正存在的地方

C:\Users\username\.babel.json
%USERPROFILE%\.babel.json  
$USERPROFILE/.babel.json       # cygwin

您可以在package.json中添加一个脚本来为您执行此操作

{
  "scripts": {
    "clean": "del %USERPROFILE%/.babel.json",
    "clean": "bash -c 'rm -vf $USERPROFILE/.babel.json'"
  }
}

如果您使用webpack,您可以动态地将cacheDirectory:参数注入.babelrc文件以便于删除

如果将babel-node直接添加到文件中,则会抛出错误

webpack.config.js

const _       = require('lodash');
const JSON5   = require('json5');

const babelrc = _.extend(
    // WARNING:  ./.babel-cache/ may occasionally get corrupted and need "npm run clean"
    // POSITIVE: ./.babel-cache/ provides a ~30% speed increase in recompile times
    { cacheDirectory: !argv.production && './.babel-cache' },
    JSON5.parse(fs.readFileSync('./.babelrc'))
);
© www.soinside.com 2019 - 2024. All rights reserved.