加载非 js 文件时清除 Node.js' 缓存,例如 graphql 语言防御



我想从我的 graphql定义中清除节点的缓存,但是在我更改 require('my.graphql')语句所在的文件之前,什么也不会发生。我认为这个问题与这个问题有关,我尝试做:

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

但不会重新加载代码。我想念的其他缓存一定是我想念的。

由于该示例有点长,所以我已经分配了此仓库,并创建了一个GraphQl-Branch,您可以安装和测试适应src/schema.graphql文件:

git clone git@github.com: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介导的。

,因此事实证明问题实际上是Babel的缓存而不是节点的缓存。更改package.json中的开始:

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

to

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

修复了问题。

babel文档建议

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 });
  • https://babeljs.io/docs/usage/babel-register/

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

C:Usersusername.babel.json
%USERPROFILE%.babel.json  
$USERPROFILE/.babel.json       # cygwin
  • https://github.com/babel/babel/issues/1148

您可以将脚本添加到您的软件包。

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

如果您使用的是WebPack,则可以动态地注入一个cachedirectory:参数为.babelrc文件,以便删除

babel节点如果将其直接添加到文件

,则会引发错误

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'))
);

而不是禁用您可能更喜欢清除缓存:

$ rm -rf ./node_modules/.cache

相关内容

最新更新