-
-
Notifications
You must be signed in to change notification settings - Fork 27k
Set baseUrl from jsconfig.json/tsconfig.json #6656
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 17 commits
Commits
Show all changes
22 commits
Select commit
Hold shift + click to select a range
13f65e8
Set baseUrl from jsconfig.json/tsconfig.json
robertvansteen 3237f4c
Resolve the path for loading modules
robertvansteen 8d35263
Add tests for jsconfig.json
robertvansteen 7ab30a4
Add jsconfig.json
robertvansteen 503bd63
Update packages/react-scripts/scripts/start.js
iansu 4dd6005
Move baseUrl test to config folder
robertvansteen d7f0816
Remove alias test
robertvansteen b16bad2
Use chalk from react-dev-utils
robertvansteen 9eca658
Add lost absolute file for typescript baseUrl test
robertvansteen a7b084f
Update packages/react-scripts/config/modules.js
mrmckeb 8193cef
Update other references of useTypeScript to hasTsConfig
robertvansteen 92af347
Merge branch 'master' into typescript-base-url
4f627e9
Fix casing of TypeScript
iansu c629a9e
Keep respecting NODE_PATH for now to support multiple module paths.
robertvansteen 359a0b2
Merge remote-tracking branch 'upstream/master' into typescript-base-url
robertvansteen e72d38c
Add test for NODE_PATH
robertvansteen 84a4792
Add fallback if NODE_PATH is not set.
robertvansteen 0690231
Fix node path behavior tests
iansu 1d8f29c
Merge branch 'master' into typescript-base-url
iansu 255a6bd
Remove debugging code from behavior test suite
iansu 0e0b19e
Remove more debugging code
iansu f039bf5
Show NODE_PATH deprecation warning during build
iansu File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
// @remove-on-eject-begin | ||
/** | ||
* Copyright (c) 2015-present, Facebook, Inc. | ||
* | ||
* This source code is licensed under the MIT license found in the | ||
* LICENSE file in the root directory of this source tree. | ||
*/ | ||
// @remove-on-eject-end | ||
'use strict'; | ||
|
||
const fs = require('fs'); | ||
const path = require('path'); | ||
const paths = require('./paths'); | ||
const chalk = require('react-dev-utils/chalk'); | ||
|
||
/** | ||
* Get the baseUrl of a compilerOptions object. | ||
* | ||
* @param {Object} options | ||
*/ | ||
function getAdditionalModulePaths(options = {}) { | ||
const baseUrl = options.baseUrl; | ||
|
||
// We need to explicitly check for null and undefined (and not a falsy value) because | ||
// TypeScript treats an empty string as `.`. | ||
if (baseUrl == null) { | ||
// If there's no baseUrl set we respect NODE_PATH | ||
// Note that NODE_PATH is deprecated and will be removed | ||
// in the next major release of create-react-app. | ||
|
||
const nodePath = process.env.NODE_PATH || ''; | ||
return nodePath.split(path.delimiter).filter(Boolean); | ||
} | ||
|
||
const baseUrlResolved = path.resolve(paths.appPath, baseUrl); | ||
|
||
// We don't need to do anything if `baseUrl` is set to `node_modules`. This is | ||
// the default behavior. | ||
if (path.relative(paths.appNodeModules, baseUrlResolved) === '') { | ||
return null; | ||
} | ||
|
||
// Allow the user set the `baseUrl` to `appSrc`. | ||
if (path.relative(paths.appSrc, baseUrlResolved) === '') { | ||
return [paths.appSrc]; | ||
} | ||
|
||
// Otherwise, throw an error. | ||
throw new Error( | ||
chalk.red.bold( | ||
"Your project's `baseUrl` can only be set to `src` or `node_modules`." + | ||
' Create React App does not support other values at this time.' | ||
) | ||
); | ||
} | ||
|
||
function getModules() { | ||
// Check if TypeScript is setup | ||
const hasTsConfig = fs.existsSync(paths.appTsConfig); | ||
const hasJsConfig = fs.existsSync(paths.appJsConfig); | ||
|
||
if (hasTsConfig && hasJsConfig) { | ||
throw new Error( | ||
'You have both a tsconfig.json and a jsconfig.json. If you are using TypeScript please remove your jsconfig.json file.' | ||
); | ||
} | ||
|
||
let config; | ||
|
||
// If there's a tsconfig.json we assume it's a | ||
// TypeScript project and set up the config | ||
// based on tsconfig.json | ||
if (hasTsConfig) { | ||
config = require(paths.appTsConfig); | ||
// Otherwise we'll check if there is jsconfig.json | ||
// for non TS projects. | ||
} else if (hasJsConfig) { | ||
config = require(paths.appJsConfig); | ||
} | ||
|
||
config = config || {}; | ||
const options = config.compilerOptions || {}; | ||
|
||
const additionalModulePaths = getAdditionalModulePaths(options); | ||
|
||
return { | ||
additionalModulePaths: additionalModulePaths, | ||
hasTsConfig, | ||
}; | ||
} | ||
|
||
module.exports = getModules(); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
19 changes: 19 additions & 0 deletions
19
packages/react-scripts/fixtures/kitchensink/integration/config.test.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
/** | ||
* Copyright (c) 2015-present, Facebook, Inc. | ||
* | ||
* This source code is licensed under the MIT license found in the | ||
* LICENSE file in the root directory of this source tree. | ||
*/ | ||
|
||
import initDOM from './initDOM'; | ||
|
||
describe('Integration', () => { | ||
describe('jsconfig.json/tsconfig.json', () => { | ||
it('Supports setting baseUrl to src', async () => { | ||
const doc = await initDOM('base-url'); | ||
|
||
expect(doc.getElementById('feature-base-url').childElementCount).toBe(4); | ||
doc.defaultView.close(); | ||
}); | ||
}); | ||
}); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
{ | ||
"compilerOptions": { | ||
"baseUrl": "src" | ||
mrmckeb marked this conversation as resolved.
Show resolved
Hide resolved
|
||
} | ||
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Empty file.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
NODE_PATH=src | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. New line missing :) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
const testSetup = require('../__shared__/test-setup'); | ||
|
||
test('builds in development', async () => { | ||
const { fulfilled } = await testSetup.scripts.start({ smoke: true }); | ||
expect(fulfilled).toBe(true); | ||
}); | ||
test('builds in production', async () => { | ||
const { fulfilled } = await testSetup.scripts.build(); | ||
expect(fulfilled).toBe(true); | ||
}); | ||
test('passes tests', async () => { | ||
const { fulfilled } = await testSetup.scripts.test({ | ||
jestEnvironment: 'node', | ||
}); | ||
expect(fulfilled).toBe(true); | ||
}); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
{ | ||
"dependencies": {} | ||
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
/** | ||
* Copyright (c) 2015-present, Facebook, Inc. | ||
* | ||
* This source code is licensed under the MIT license found in the | ||
* LICENSE file in the root directory of this source tree. | ||
*/ | ||
|
||
import React, { Component } from 'react'; | ||
|
||
import PropTypes from 'prop-types'; | ||
import load from 'absoluteLoad'; | ||
|
||
export default class extends Component { | ||
static propTypes = { | ||
onReady: PropTypes.func.isRequired, | ||
}; | ||
|
||
constructor(props) { | ||
super(props); | ||
this.state = { users: [] }; | ||
} | ||
|
||
async componentDidMount() { | ||
const users = load(); | ||
this.setState({ users }); | ||
} | ||
|
||
componentDidUpdate() { | ||
this.props.onReady(); | ||
} | ||
|
||
render() { | ||
return ( | ||
<div> | ||
{this.state.users.map(user => ( | ||
<div key={user.id}>{user.name}</div> | ||
))} | ||
</div> | ||
); | ||
} | ||
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
/** | ||
* Copyright (c) 2015-present, Facebook, Inc. | ||
* | ||
* This source code is licensed under the MIT license found in the | ||
* LICENSE file in the root directory of this source tree. | ||
*/ | ||
|
||
import React from 'react'; | ||
import ReactDOM from 'react-dom'; | ||
import App from './App'; | ||
|
||
test('loads modules absolutely with NODE_PATH', () => { | ||
const div = document.createElement('div'); | ||
return new Promise(resolve => { | ||
ReactDOM.render(<App onReady={resolve} />, div); | ||
}); | ||
}); |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.